Tengo un problema.
Usando ajax, envié un objeto JSON formado correctamente usando:
$.ajax({ type: "POST", url: SITE_URL+'/data.php', dataType: "json", data: { ajax: 1 }, success: function(data) { console.log(data); } });Sin embargo, Opera y Chrome, aunque reciben el mismo objeto, lo imprimen en un orden incorrecto, ¡parece que ambos realizan una clasificación por número de ID en lugar de dejarlo solo!
¿Hay alguna manera de detener esta ordenación automática?
Editar, después de descubrir que es una ordenación por número de índice, creo que el mejor método podría ser no usar el índice para almacenar el object_id y, en cambio, almacenar el número de identificación por el que quiero ordenar el objeto.
Sin embargo, todavía me gustaría saber si hay una manera de detener el tipo.
Gracias
Edit2, me gustaría señalar que voy a trabajar en una forma diferente de hacer esto, ya que siento que estoy abusando de los objetos con este método. Sin embargo, todavía me gustaría entender por qué Opera y Chrome sienten que tienen derecho a cambiar el orden de las ID de mis objetos:
El problema sería que intentara ahorrar potencia de procesamiento, digamos que tenemos personas con una identificación,
1.John, 2.Frank y 3.Sally. Sin embargo, cada una de estas personas tiene un conjunto de propiedades de alto nivel (y otras cosas). 1.John.180, 2.Frank.220, 3.Sally.150. Para ahorrar en el procesamiento, solicito que el resultado de las personas se ordene por su altura para obtener una matriz de 2, 1, 3 con sus otras propiedades. I JSON esta matriz y la envío al navegador.
Ahora FF mantendrá el nuevo orden. Las personas [1] seguirían siendo John, pero en un bucle For n as person estarán fuera de servicio.
Si no puedo evitar esto, simplemente tendré que no molestarme en clasificar en la etapa SQL y agregar bucles adicionales y clasificar en una matriz en la etapa JS, aunque quería evitar más estrés en el navegador, ya que es un Js pesado página.
Muchas gracias
Tuve el mismo problema, seguí la solución de dmc pero solo agregué un espacio delante del valor int para convertirlo en una cadena.
La ventaja de usar un espacio en lugar de otro carácter no numérico es que el valor enviado posteriormente se puede usar directamente en una cláusula de búsqueda de mySQL sin tener que eliminarlo nuevamente.
Los diferentes navegadores manejan los objetos de diferentes maneras, mi culpa fue tratar de usar el orden en que construí un objeto como referencia donde no debería.
Cambiar entero a cadena no funcionó para mí (Chrome, jQuery 1.7.1). Entonces, para mantener el orden (sí, es abuso de objetos), cambié esto:
optionValues0 = {"4321": "option 1", "1234": "option 2"};a esto
optionValues0 = {"1": {id: "4321", value: "option 1"}, "2": {id: "1234", value: "option 2"}};