jQuery.ajax () + objet JSON vide = erreur d'analyse
J'obtiens une erreur d'analyse lors de l'utilisation de jQuery pour charger des données JSON. Voici un extrait de mon code:
jQuery.ajax({
dataType: "json",
success: function (json)
{
jQuery.each(json, function ()
{
alert(this["columnName"]);
});
}
});
Je n'obtiens pas d'erreurs lors de l'analyse d'un non-vide d'objet JSON. Je pense que le problème est avec mon sérialiseur.
Question est: comment dois-je formater un vide d'objet JSON qui jQuery n'envisage pas de mal formés?
C'est ce que j'ai essayé jusqu'à présent, sans succès:
{[]}
{[null]}
{}
{null}
{"rows": []}
{"rows": null}
{"rows": {}}
Mise à JOUR:
Je peux comprendre que j'ai été un peu vague--laissez-moi essayer de préciser:
De l'analyse de l'objet JSON n'est pas la question ici--JQuery est - je pense.
jQuery jette un parse erreur (invoque la fonction d'erreur). Il semble que jQuery JSON interne de validation n'est pas d'accepter toute de les objets. Pas même les valides.
De sortie de la fonction d'erreur est:
XMLHttpRequest:
XMLHttpRequest readyState=4 status=200
textStatus:
parsererror
errorThrown:
undefined
Cela vaut pour tous les objets.
source d'informationauteur roosteronacid | 2009-04-06
Vous devez vous connecter pour publier un commentaire.
La solution est de retourner un code d'état de 204 plutôt que de 200 à partir du serveur, 204 est "pas content" et ce sera le retour de la réussite tout en n'essayant pas d'invoquer l'analyseur
Tout d'abord
{[]}
{[null]}
et{null}
ne fonctionnent pas parce qu'ils sont tous valides objets JSON (vérifiée par le JSON validateur).Les objets restants sont tous valides objets JSON, de sorte que votre
success
fonction doit être appelée.Si vous passez un non-matrice ou tableau d'objet de type objet, puis le
each
fonction énumère votrejson
objet par son nom de propriétés. Dans le cas de vos trois objets qui ont chacun unrows
propriététhis
sera mis à[]
null
et{}
respectivement, aucun n'a uncolumnName
attribut donc un non défini erreur sera levée.Votre
{}
objet sur l'autre main n'a pas de propriétés, et donc ne devrait pas être à l'origine d'une erreur, parce que leeach
appel de la boucle de 0 fois. Ce ne la ligne suivante s'afficher si vous l'ajouter à la première ligne de votresuccess
fonction?vous êtes à la recherche pour cette:
un tableau vide. C'est, si vous envisagez de parcourir tout de suite, alors ce que vous avez besoin est un tableau.
Votre service web peut être retourner null. J'ai trouvé que le retour des nuls à partir d'un appel de service web renvoie une réponse avec le code d'état 200, "Ok", mais jQuery jette un parseerror par la suite.
Si c'est le cas, il n'a rien à voir avec ce que vous envoyez au serveur, et tout ce que le serveur est de l'envoi de retour.
Si vous êtes en mesure de modifier le service web, vous voudrez peut-être essayer de retourner un vide d'objet JSON, ou une valeur par défaut au lieu de Null. Alternativement, vous pouvez le vérifier ce scénario d'erreur dans votre gestionnaire d'erreur, sachant que cela signifie que votre appel a retourné null.
Avez-vous vérifié si le JSON est retourné correctement en premier lieu, avant de le chaque? Définissez la valeur vide {}, et de vérifier si c'est comme ça avant .chaque
Aussi il serait utile de savoir comment votre JSON ressemble quand il n'y a de données.
Au lieu de:
Je pense que vous voulez utiliser:
De la jQuery.chaque documentation:
Je connaît des problèmes similaires lors de la demande de JSON valide à partir du serveur.
Mon serveur était en train de servir le content-type text/javascript
Je n'étais pas à l'aide de l'option de jQuery.ajax paramètre 'type' afin de jQuery a été interpretting la sortie d'un javascript (par exemple collier de JSON), pas soigné JSON.
L'ajout d'un dataType:'JSON' pour les paramètres de l'objet passé en jQuery ajax méthode a résolu le problème.
Eu ce problème aussi, et résolu à l'aide de la jsonserializer dans mon web service pour formater une chaîne vide. le résultat est fut "\"\"" essentiellement "" ;