J'ai une servlet qui parle avec la base de données puis retourne une liste d'objets ordonnés (ORDER BY time). Dans la partie servlet, j'aiCommandé JSONObject
//access DB, returns a list of User objects, ordered ArrayList users = MySQLDatabaseManager.selectUsers(); //construct response JSONObject jsonResponse = new JSONObject(); int key = 0; for(User user:users){ log("Retrieve User " + user.toString()); JSONObject jsonObj = new JSONObject(); jsonObj.put("name", user.getName()); jsonObj.put("time", user.getTime()); jsonResponse.put(key, jsonObj); key++; } //write out out.print(jsonResponse);
À partir du journal, je peux voir que la base de données renvoie les objets Utilisateur dans le bon ordre.
Au bout avant, j'ai
success: function(jsonObj){ var json = JSON.parse(jsonObj); var id = 0; $.each(json,function(i,item) { var time = item.time; var name = item.name; id++; $("table#usertable tr:last").after('<tr><td>' + id + '</td><td width="20%">' + time + '</td><td>' + name + '</td></tr>'); }); },
Mais l'ordre est changé.
Je l'ai seulement remarqué lorsque la liste renvoyée a une grande taille (plus de 130 utilisateurs).
J'ai essayé de déboguer en utilisant Firebug, l'onglet "réponse" dans Firebug montre que l'ordre de la liste est différent avec le journal dans le servlet.
Ai-je commis une erreur?
EDIT: Exemple
{"0":{"time":"2011-07-18 18:14:28","email":"[email protected]","origin":"origin-xxx","source":"xxx","target":"xxx","url":"xxx"}, "1":{"time":"2011-07-18 18:29:16","email":"[email protected]","origin":"xxx","source":"xxx","target":"xxx","url":"xxx"}, "2": ,..., "143":{"time":"2011-08-09 09:57:27","email":"[email protected]","origin":"xxx","source":"xxx","target":"xxx","url":"xxx"} ,..., "134":{"time":"2011-08-05 06:02:57","email":"[email protected]","origin":"xxx","source":"xxx","target":"xxx","url":"xxx"}}
Veuillez donner un exemple de ce à quoi ressemble votre objet JSON. Les objets JSON ne sont associés à aucun «ordre» spécifique. Pour ce faire, vous devez utiliser un tableau (lui-même pouvant être stocké dans un objet JSON). – ghayes
Salut ghayes, merci pour vos astuces (les objets JSON n'ont aucun 'ordre' spécifique qui leur est associé). Je m'attendais à ce que les objets retournés aient le même ordre que celui qui a été construit. J'ai examiné de plus près les objets JSON de Firebug et j'ai remarqué que je pouvais utiliser la valeur de la clé pour réorganiser la liste. – user200340
Si vous êtes préoccupé par le tri, j'ai également écrit du JavaScript dans ma réponse pour faire exactement cela. Prendre plaisir! – ghayes