9
votes

Accéder aux données JSON de JQuery

Je crée une application AJAX à l'aide de JQuery 1.4.2 et j'ai essayé d'utiliser Utilisation de get (), Post () et la méthode Ajax () elle-même. Mon service PHP revient:

function getSysinfo(source) {
    var json = null;
    $.ajax({
        url: source,
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            json = eval("(" + data + ")");
            $('#data').html(json.status);
            alert(json[0][0]);
            refreshChart(json);
        },
        error: function (request, status, error) {
            alert("REQUEST:\t" + request + "\nSTATUS:\t" + status + 
                  "\nERROR:\t" + error);
        }
    });
    return json;
}


1 commentaires

J'ai donné une réponse qui peut être utilisée dans votre cas, il existe déjà des méthodes disponibles comme Getjson qui prend soin de toutes les questions et vous pouvez simplement faire boucle


8 Réponses :


8
votes

Dans votre réussite Rappel Essayez:

var parsed = $.parseJSON(data);
$.each(parsed, function (i, jsondata) {
    alert( jsondata.k );
    alert( jsondata.v );
});


4 commentaires

@LOREZO, nous devons faire boucle à travers tous les éléments ?? qu'est-ce que .k et .v donne ??


@gov: Tu as raison !! J'ai manqué la partie de boucle. Édité la réponse pour refléter cette


Vous n'avez pas besoin d'analyser le JSON comme ça, JQuery l'aura déjà analysé.


merci les gars. Cela semble prometteur B / C, j'ai besoin de boucler dans les données et de les faire dans les bons endroits ... Laissez-moi lire un peu sur Parsejson, puis je vais jouer pendant un moment.



5
votes

Vous n'avez pas besoin du eval ("(" + données + ")"); . JQuery analyse automatiquement la réponse JSON pour vous parce que vous avez spécifié DataType: 'JSON'

de la DOCS JQuery pour DataType:

"JSON": évalue la réponse en tant que JSON et renvoie un objet JavaScript. Dans JQuery 1.4, les données JSON sont analysées de manière stricte; Tout JSON mal formé est rejeté et une erreur d'analyse est lancée. (Voir Json.org pour plus d'informations sur le formatage JSON approprié.)


5 commentaires

NON. MAUVAIS. JSON.PARSE () . N'utilisez pas eval pour JSON. MAUVAIS.


Je ne préconise pas en utilisant Eval. Je dis simplement qu'il n'en a pas besoin. Aussi JSON.PARSE n'est pas pris en charge par tous les navigateurs (surtout les plus âgés). En utilisant quelque chose comme $ .parsjson qui rend une décision éclairée basée sur le navigateur est probablement mieux.


Je suis d'accord avec la partie eval (), je n'étais tout simplement pas sûre de ce qui se passait sous le capot. Certains des choses que j'étais googling étaient de plusieurs années. J'ai appris que JQuery 1.4 l'a construit de manière construite, alors j'aurais seulement besoin si mon ruisseau était de type = 'Text' .. Mais je vais regarder plus dans Parsejson ().


Oups désolé - je voulais dire type de données = 'Text'


Ouais ça l'a fait - je n'ai même pas besoin d'autre chose. Je viens de modifier mon rappel pour réussir pour boucler les changements nécessaires pour faire. Ma plus grande erreur était de penser que les données [0] .v étaient des données [0] [0] merci encore.



4
votes

Pas besoin d'utiliser EVAL TOUJOURS UTILISER SUIVI-CODE Qui peut être plus pour JSON

$.getJSON(url+query,function(json){
            $.each(json,function(i,value){

            });
        });


2 commentaires

Ce n'est pas nécessaire, le code dans la question va déjà parcourir le JSON parfaitement heureux. En outre, $ .getjson ne peut être utilisé que pour obtenir des demandes non post, car la question utilise.


Ouais j'ai besoin de post & ajax () donne également plus de flexibilité avec les options. Merci pour la réponse, bien que ...



2
votes

Nagood a déjà écrit que vous n'avez pas besoin de faire quoi que ce soit avec des données, c'est déjà un objet.

Dans ce cas, c'est un tableau, si vous souhaitez accéder au statut, vous devez le récupérer à partir du dernier élément. du tableau de données (c'est là que vous le trouverez dans ce tableau): xxx

mais vous devriez peut-être penser à une autre structure de votre JSON, il ne regarde pas très confortable.

quelque chose comme ça: xxx

... devrait être plus facile à gérer, car vous pouvez simplement accéder aux données.status au lieu de la première fois où vous pouvez le trouver à l'intérieur de la réponse (ce qui peut être sujet à une erreur).


2 commentaires

Je m'en fous 2 beaucoup sur le statut, mais les paires K / V ... Je pensais que c'était peut-être nécessaire pour que la réponse ait déclencher l'analyse. J'essayais de l'obtenir dans quelque chose de similaire à votre structure, mais je l'ai fait par inadvertance et Array_Push ($ JSONDATA, Array ("Statut" => "OK")); - sur le côté PHP. Dans tous les cas, j'avais besoin de la nomenclature pour accéder correctement à la matrice ...


J'apprécie votre aide, cependant.



9
votes

Vos données JSON ressemblent à ceci: xxx

Vous devriez lire votre statut à l'aide de xxx

avec le avec le avec le 4 comme numéro magique ou longueur-1 - pas souhaitable. Je envisagerais de modifier la réponse de vos serveurs à quelque chose de plus utile comme ceci: xxx


0 commentaires

13
votes

Pour accéder à cette valeur d'état, vous auriez besoin:

data[4].status


1 commentaires

Ahh - Eh bien, cela fait un peu plus de sens ... je ne me souciais pas vraiment de l'élément de statut. J'avais besoin des paires K / V. J'étais vraiment juste expérimenter ... et je pensais que les données [1] .v et données [1] [1] étaient synonymes. merci.



1
votes

Le paramètre de données est le JSON décodé comme vous pouvez le constater dans cet exemple:

http://www.jsfiddle.net/rlprv/1/


0 commentaires

1
votes
$.ajax({
        url: url,
        type: 'POST',
        dataType: 'json',
        data: formData,
        showLoader:true,
        success: function (response) {
            var parsed =  JSON.parse(JSON.stringify(response));
            $.each(parsed, function (key, val) {
                alert( val.name );                      
            });
        },
        error: function (err) {
            alert("Please enter a valid id")    
        }
     });

0 commentaires