Parser JSON à partir de JQuery.ajax succès de données
J'ai de la difficulté à obtenir le contenu de l'objet JSON à partir d'un JQery.appel ajax. Mon appel:
$('#Search').click(function () {
var query = $('#query').valueOf();
$.ajax({
url: '/Products/Search',
type: "POST",
data: query,
dataType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
for (var x = 0; x < data.length; x++) {
content = data[x].Id;
content += "<br>";
content += data[x].Name;
content += "<br>";
$(content).appendTo("#ProductList");
//updateListing(data[x]);
}
}
});
});
Il semble que l'objet JSON retourné correctement parce que "alert(data)" affiche les éléments suivants
[{"Id": "1", "Name": "Shirt"}, {"Id": "2", "Name":"Pants"}]
mais quand j'essaie de l'affichage de l'Id ou le Nom de la page à l'aide de:
content = data[x].Id;
content += "<br>";
content += data[x].Name;
content += "<br>";
il retourne "undefined" à la page. Ce que je fais mal?
Merci pour l'aide.
- Documentation d'aide. api.jquery.com/jQuery.ajax, montre que
'application/json; charset=utf-8'
n'est pas une valeur valide pourdataType
. - Convertir en json par JSON.parse()
Vous devez vous connecter pour publier un commentaire.
Les données est de retour comme la représentation de chaîne de caractères au format JSON et vous n'êtes pas convertir le dos à l'objet JavaScript. Définir la
dataType
juste'json'
pour convertir automatiquement.dataType: 'json'
seulement, si vous êtes sûr, que le serveur sera de retour poperly formatées en JSON. Si elle renvoie uniquement "une chaîne de caractères, qui ressemble à du JSON", vous devez utiliserdataType: "text json"
à force de jQuery conversion.Je vous recommande d'utiliser:
pour convertir la chaîne JSON (si c'est juste le texte) à un objet JavaScript.
success: function (data) {data = JSON.parse(data);}
, si je ne me trompe pas.L'un de la façon dont vous pouvez vous assurer que ce type d'erreur (à l'aide de chaîne, au lieu de json) n'est pas arriver, c'est de voir ce qui est imprimé dans le
alert
. Lorsque vous nesi des données est une chaîne de caractères, il permet d'imprimer tout ce qui est contient. Toutefois, si vous avez l'impression est objet json. vous recevrez la réponse suivante dans l'alerte
Si ce la réponse, alors vous pouvez être sûr que vous pouvez l'utiliser comme un objet json (dans ce cas).
Donc, vous avez besoin de convertir votre texte en json tout d'abord, avant de l'utiliser en faisant ceci:
Il fonctionne très bien,
Ex :
Enfin, vous devez utiliser cette déclaration ...
Bien... vous êtes sur le 3/4 du chemin... vous avez déjà votre JSON en tant que texte.
Le problème est que vous semblez être de la manipulation de cette chaîne, comme si c'était déjà un objet JavaScript avec des propriétés concernant les champs qui ont été transmis.
Il ne l'est pas... c'est juste une chaîne de caractères.
Des requêtes comme "content = data[x].Id;" sont vouées à l'échec parce que le JavaScript n'est pas de trouver ces propriétés sont attachées à la chaîne qui consiste à regarder... encore une fois, c'est JUSTE une chaîne de caractères.
Vous devriez être en mesure de simplement analyser les données en JSON par... ouais... la méthode d'analyse de l'objet JSON.
Maintenant myResult est un objet javascript contenant les propriétés qui ont été transmis à travers AJAX.
Qui devraient vous permettre de gérer de la façon qui vous semble être d'essayer d'.
Ressemble JSON.analyser a été ajoutée lors de ECMA5 a été ajouté, donc quelque chose d'assez moderne doit être capable de gérer ce mode natif... si vous avez à gérer des fossiles, vous pouvez également essayer les bibliothèques externes pour gérer cela, comme jQuery ou JSON2.
Pour mémoire, il a déjà été répondu par Andy E pour quelqu'un d'autre ICI.
modifier - Vu la demande d'officiel ou de sources crédibles", et probablement l'un des codeurs que je trouve la plus crédible serait John Resig ~ ECMA5 JSON ~ j'aurais relié à la ECMA5 spec concernant native prise en charge de JSON, mais je préfère référez quelqu'un pour un maître comme Resig que d'un sèche spécification.
Essayer le jquery
each
fonction de marcher à travers votre objet json:vous pouvez utiliser le jQuery, parseJSON méthode:
De l'API jQuery: avec le réglage de
dataType
, Si aucun n'est spécifié, jQuery va essayer d'en déduire avec$.parseJSON()
basée sur le MIME type (le type MIME pour JSON texte est "application/json") de la réponse (en 1.4 JSON donnera un objet JavaScript).Ou vous pouvez définir la
dataType
àjson
pour convertir automatiquement.Je ne suis pas sûr de ce qui se passe mal avec votre configuration. Peut-être que le serveur n'est pas de mise les en-têtes correctement. Pas sûr. Comme un long shot, vous pouvez essayer ce
input type Bouton
J'ai réussi posté un formulaire avec AJAX en perl. Après l'affichage de la forme, le contrôleur retourne une réponse JSON comme ci-dessous
analyser et de le convertir en objet js c'est tout.