2010-10-22 9 views
3

dire que je soumets un formulaire via Ajax et ont besoin d'une réponse du serveur:Réponse AJAX: sugestions pour le format JSON?

  • indicateur de réussite/échec
  • Sur échouent, une liste des erreurs de validation avec le champ associés ids/noms, etc

Existe-t-il une norme ou une meilleure pratique pour le format JSON pour une telle structure? Si c'est le cas, j'aimerais essayer de m'en tenir à cela plutôt que de proposer ma propre convention.

+0

Je n'ai jamais entendu parler d'un format standard. –

Répondre

1
{ 
    "result": "false", 
    "fields": 
     [ 
      {"id": "element1", "name": "element1"}, 
      {"id": "element2", "name": "element2"}, 
      {"id": "element3", "name": "element3"} 
     ] 
} 
+2

Je recommande une structure différente où il s'agit de "messages" plutôt que de "champs" et chaque objet de cette collection peut être associé à un champ. Tous les messages renvoyés par le serveur (que ce soit un message d'erreur, un message de réussite ou autre) ne seront pas associés à un "champ". – Fleep

0

Hmm. Je ne sais pas d'une norme, mais vous pourriez vouloir juste faire quelque chose comme

{ 
    "result": "false", 
    "errors": 
     [ 
      {"errorCode": "1234", "errorText": "malformed address"}, 
      {"errorCode": "5678", "errorText": "no username"} 
     ] 
} 
+1

Pourquoi ne pas simplement vérifier les erreurs array si result = false? – StackOverflowNewbie

+0

c'est quelque chose que nous faisons au travail. Je ne suis pas sûr du raisonnement moi-même: P Je suppose que c'est pour un cas d'échec de validation générale, auquel aucune erreur spécifique ne correspond ... mais là encore, cela semblerait mériter un code d'erreur catchall. Je ne suis pas sûr pourquoi ils le font :) – Gopherkhan

+0

imho son redondant et pas de tolérance aux pannes. vérifier si le tableau d'erreurs a des valeurs avant d'y accéder est imho dans de tels cas nécessaires. sinon vous devez gérer l'exception en accédant à – Stefan

4

OmniTI a un niveau de vie décent que j'aime et recommande : http://labs.omniti.com/labs/jsend

{ 
    status : "success", 
    data : { 
     "posts" : [ 
      { "id" : 1, "title" : "A blog post", "body" : "Some useful content" }, 
      { "id" : 2, "title" : "Another blog post", "body" : "More content" }, 
     ] 
    } 
} 

J'utilise habituellement une variante:

{ 
    status : "error", 
    messages : { 
     "some_field" : "message" 
    } 
} 
Questions connexes