64 votes

Comment arrêter le tri des objets JSON par Chrome et Opera par Index ASC?

J'ai un problème.

L'utilisation d'ajax, j'ai envoyé un correctement formé objet JSON à l'aide de:

            $.ajax({
                type: "POST", 
                url: SITE_URL+'/data.php',
                dataType: "json",
                data: { ajax: 1 },
                success: function(data) {
                    console.log(data);
                }
            });

Toutefois, Opera et Chrome, bien que la réception de l'objet même, l'impression de l'objet dans un ordre incorrect, il semble qu'ils à la fois effectuer un tri par numéro d'identification au lieu de simplement le laisser seul!

Est-il un moyen d'arrêter cette auto tri?

Edit, après avoir trouvé, c'est un tri par numéro d'index je pense que la meilleure méthode pourrait être de ne pas utiliser l'index pour le stockage de la object_id et au lieu de stocker le numéro d'identification qui je veux commander l'objet par.

Cependant, je voudrais quand même savoir si il y a un moyen d'arrêter de la sorte.

Merci

Edit2, je vais juste note que je vais travailler sur une façon différente de le faire, comme je me sens comme je suis abuser des objets avec cette méthode. Cependant, je voudrais encore à comprendre pourquoi Opera et Chrome sentir qu'il est de leur droit de modifier l'ordre de mes objets Id:

Le problème serait moi en essayant de sauver de la puissance de traitement, permet de dire que nous avons des gens avec un ID,

1.Jean, 2.Frank et 3.Sally. Toutefois, chacune de ces personnes ont un hight propriété et d'autres choses). 1.Jean.180, 2.Frank.220, 3.Sally.150. Pour enregistrer sur le traitement, mon je demande le résultat de personnes qui seront triés en fonction de leur hauteur pour que je obtenir un tableau de 2, 1, 3 avec leurs autres propriétés. Je JSON ce tableau et de l'envoyer au navigateur.

Maintenant FF gardera le nouvel ordre De personnes[1] serait encore Jean, mais dans une Pour n en tant que personne en boucle qu'ils vont être hors de vue.

Si je ne peux pas contourner cela, je vais juste pas la peine de tri à la SQL scène et ajouter de la boucle et de tri dans un tableau dans le JS phase, bien que je voulais éviter plus de stress sur le navigateur comme sa déjà un Js lourds de la page.

Merci beaucoup

27voto

FarnhamBee Points 51

Avait le même problème, suivait la solution de dmc mais ajoutais juste un espace devant la valeur int pour en faire une chaîne.

L'avantage d'utiliser un espace plutôt qu'un autre caractère non numérique est que la valeur POSTed ultérieure peut être utilisée directement dans une clause de recherche mySQL sans avoir à la supprimer.

21voto

Dorjan Points 933

Différents navigateurs traitent les objets de différentes manières, ma faute était d'essayer d'utiliser l'ordre dans lequel j'ai construit un objet comme référence là où je ne devrais pas.

19voto

Michail Points 111

Changer le nombre entier en chaîne ne fonctionnait pas pour moi (Chrome, jQuery 1.7.1). Donc pour garder l'ordre (oui, c'est un abus d'objet), j'ai changé ceci:

 optionValues0 = {"4321": "option 1", "1234": "option 2"};
 

pour ça

 optionValues0 = {"1": {id: "4321", value: "option 1"}, "2": {id: "1234", value: "option 2"}};
 

14voto

James Long Points 1360

À moins que JSON soit un tableau plutôt qu'un objet, il n'existe aucune norme indiquant qu'il doit figurer dans un certain ordre. Cependant, cela ne devrait pas poser de problème, car vous n'avez pas besoin de parcourir l'objet pour obtenir les données, vous pouvez simplement faire référence à la propriété.

5voto

Alasjo Points 872

J'ai eu le même "problème" et je ne voulais pas revenir en arrière et trop changer dans le code. Compris qu'au moins Google Chrome ne trie à nouveau que les index numériques. Tant que l'index est considéré comme une chaîne, il apparaîtra dans l'ordre "prévu". Quelqu'un pourrait-il s'il vous plaît vérifier cela sur Opera?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X