Parse JSON de JQuery.données sur le succès d'ajax

j'ai du mal à obtenir le contenu de l'objet JSON 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 soit retourné correctement car "alert (data)" affiche ce qui suit

[{"Id": "1", "Name": "Shirt"}, {"Id": "2", "Name":"Pants"}]

mais quand j'essaie d'afficher L'Id ou le nom sur la page en utilisant:

content = data[x].Id;
content += "<br>";
content += data[x].Name;
content += "<br>";

il retourne "undefined" à la page. Ce que je fais mal?

Merci pour le aider.

60
demandé sur actkatiemacias 2011-03-13 14:31:18

9 réponses

les données reviennent en tant que représentation de chaîne de caractères du JSON et vous ne les convertissez pas en objet JavaScript. Réglez le dataType sur 'json' pour qu'il soit converti automatiquement.

86
répondu Marcelo Cantos 2011-03-13 11:35:31

je vous recommande d'utiliser:

var returnedData = JSON.parse(response);

pour convertir la chaîne JSON (si ce n'est que du texte) en un objet JavaScript.

55
répondu abobreshov 2013-08-22 05:28:16

un des moyens de vous assurer que ce type d'erreur (en utilisant string au lieu de json) n'arrive pas est de voir ce qui est imprimé dans le alert . Quand vous faites

alert(data)

si data est une chaîne de caractères, elle imprimera tout ce qui est contenu. Cependant si vous imprimez est objet json. vous recevrez la réponse suivante dans l'alerte

[object Object]

Si ce la réponse, alors vous pouvez être sûr que vous pouvez l'utiliser comme un objet json (en ce cas).

ainsi, vous devez d'abord convertir votre chaîne en json, avant de l'utiliser en faisant ceci:

JSON.parse(data)
9
répondu geeky_sh 2015-07-15 06:20:29

bien... vous êtes environ 3/4 de la manière là-bas... vous avez déjà votre JSON en texte.

le problème est que vous semblez gérer cette chaîne comme si elle était déjà un objet JavaScript avec des propriétés relatives aux champs qui ont été transmis.

ça ne l'est pas... c'est juste une chaîne de caractères.

requêtes comme " content = data[x].Id; " sont voués à l'échec parce que JavaScript ne trouve pas ces propriétés attachées à la chaîne qu'il est en train de regarder... encore une fois, ce n'est qu'une ficelle.

vous devriez être en mesure de simplement analyser les données comme JSON à travers... yup... la méthode parse de l'objet JSON.

myResult = JSON.parse(request.responseText);

maintenant myResult est un objet javascript contenant les propriétés qui ont été transmises par AJAX.

qui devrait vous permettre de le gérer comme vous semblez essayer de le faire.

ressemble à JSON.parse a été ajouté lorsque ECMA5 a été ajouté, de sorte que tout ce qui est assez moderne devrait être en mesure de gérer cela nativement... si vous devez manipuler des fossiles, vous pouvez aussi essayer des bibliothèques externes, comme jQuery ou JSON2 .

pour rappel, Andy E a déjà répondu à cette question pour quelqu'un d'autre ici .

edit - vu la demande de "sources officielles ou crédibles", et probablement un des codeurs que je trouve le plus crédible serait John Resig ~ ECMA5 JSON ~ j'aurais relié à la spécification ECMA5 réelle concernant le support JSON natif, mais je préférerais renvoyer quelqu'un à un master comme Resig qu'à une spécification sèche.

5
répondu Steve 2017-05-23 12:02:56

vous pouvez utiliser la méthode jQuery parseJSON:

var Data = $.parseJSON(response);
3
répondu Suchit kumar 2015-07-15 06:08:38

c'est le travail, par exemple

.ajax({

            url: "http://localhost:11141/Search/BasicSearchContent?ContentTitle=" + "تهران",
            type: 'GET',
            cache: false,
            success: function (result) {

                //  alert(jQuery.dataType);
                if (result) {
                    //  var dd = JSON.parse(result);
                    alert(result[0].Id)
                }

            },
            error: function () {
                alert("No");
            }
        });

Enfin, vous devez utiliser cette instruction ...

result[0].Whatever 
3
répondu Amin Saadati 2018-01-23 06:32:56

Essayez le jquery each la fonction de marche par le biais de votre objet json:

$.each(data,function(i,j){
    content ='<span>'+j[i].Id+'<br />'+j[i].Name+'<br /></span>';
    $('#ProductList').append(content);
});
2
répondu arabeske 2014-08-06 12:18:32

de l'API jQuery: avec le paramètre dataType , si aucun n'est spécifié, jQuery tentera de le déduire avec $.parseJSON() basé sur le type MIME (le type MIME pour le texte JSON est" application/json") de la réponse (dans la version 1.4 JSON donnera un objet JavaScript).



Ou vous pouvez définir la dataType à json pour convertir automatiquement.

0
répondu Sky Yip 2015-12-21 06:31:50

Je ne suis pas sûr de ce qui va mal avec votre installation. Peut-être que le serveur ne règle pas les en-têtes correctement. Pas sûr. Comme un long shot, vous pouvez essayer ce

$.ajax({
    url : url,
    dataType : 'json'
})
.done(function(data, statusText, resObject) {
   var jsonData = resObject.responseJSON
})
0
répondu pravin 2016-01-17 12:11:29