Comment analyser les données JSON avec jQuery / JavaScript?

194

J'ai un appel AJAX qui renvoie du JSON comme celui-ci:

$(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: 'http://example/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
            var names = data
            $('#cand').html(data);
        }
    });
});

À l'intérieur de la #canddiv, je vais obtenir:

[ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ]

Comment puis-je parcourir ces données et placer chaque nom dans un div?

Vache patriotique
la source

Réponses:

289

En supposant que votre script côté serveur ne définit pas l'en- Content-Type: application/jsontête de réponse approprié, vous devrez indiquer à jQuery qu'il s'agit de JSON en utilisant le dataType: 'json'paramètre.

Ensuite, vous pouvez utiliser la $.each()fonction pour parcourir les données:

$.ajax({ 
    type: 'GET', 
    url: 'http://example/functions.php', 
    data: { get_param: 'value' }, 
    dataType: 'json',
    success: function (data) { 
        $.each(data, function(index, element) {
            $('body').append($('<div>', {
                text: element.name
            }));
        });
    }
});

ou utilisez la $.getJSONméthode:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});
Darin Dimitrov
la source
Succès. Merci. Dois-je envoyer json pr je peux envoyer quelque chose à partir de ma fonction php?
Patrioticcow
7
@Patrioticcow, vous pouvez également envoyer du JSON. Dans ce cas , vous devrez régler le contentType: 'application/json'paramètre dans votre $.ajaxfonction et JSON sérialiser le dataparamètre, comme ça: data: JSON.stringify({ get_param: 'value' }). Ensuite, dans votre script php, vous devrez décoder json pour récupérer l'objet d'origine.
Darin Dimitrov
Qu'est-ce que c'est "done: function"? Est-ce la même chose que «succès»? Je ne le vois pas dans les documents.
Buttle Butkus
Mes données json sont de {"0":{"level1":"done","level2":"done","level3":"no"}}savoir comment extraire cela dans chaque variable? J'ai essayé comme ça en utilisant la $.eachméthode mais retourne var undefinedlevel1 = ele[0].level1;
151291
@DarinDimitrov Comment afficher ces données dans un bootstrap de carrousel?
Abedin.Zhuniqi
81

Le paramètre dataType:'json'analysera JSON pour vous:

$.ajax({
  type: 'GET',
  url: 'http://example/functions.php',
  data: {get_param: 'value'},
  dataType: 'json',
  success: function (data) {
    var names = data
    $('#cand').html(data);
  }
});

Ou bien vous pouvez utiliser parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Ensuite, vous pouvez itérer ce qui suit:

var j ='[{"id":"1","name":"test1"},{"id":"2","name":"test2"},{"id":"3","name":"test3"},{"id":"4","name":"test4"},{"id":"5","name":"test5"}]';

... en utilisant $().each:

var json = $.parseJSON(j);
$(json).each(function (i, val) {
  $.each(val, function (k, v) {
    console.log(k + " : " + v);
  });
}); 

JSFiddle

Rafay
la source
mes données json est de {"0":{"level1":"done","level2":"done","level3":"no"}}savoir comment extraire cela dans chaque variable? J'ai essayé comme ça en utilisant la $.eachméthode mais retourne var indéfinielevel1 = ele[0].level1;
151291
1
@ 151291 ce n'est pas une bonne façon de poser votre question, de toute façon voici le violon jsfiddle.net/fyxZt/1738 pour votre json. Notation de tableau de notesjson[0]
Rafay
Merci. réponse utile. Comment obtenir la valeur de colonne spécifiée dans une table de base de données?
PHPFan
@PHPFan vous voulez dire comment interroger la table de base de données? Veuillez fournir plus d'informations et je recommanderais de poser une nouvelle question, avec les détails nécessaires inclus.
Rafay
@Rafay par exemple dans cette question si je veux obtenir les valeurs de nom uniquement
PHPFan
25

Essayez le code suivant, cela fonctionne dans mon projet:

//start ajax request
$.ajax({
    url: "data.json",
    //force to handle it as text
    dataType: "text",
    success: function(data) {

        //data downloaded so we call parseJSON function 
        //and pass downloaded data
        var json = $.parseJSON(data);
        //now json variable contains data in json format
        //let's display a few items
        for (var i=0;i<json.length;++i)
        {
            $('#results').append('<div class="name">'+json[i].name+'</>');
        }
    }
});
Sarabhaiah Polakam
la source
11
 $(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: '/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
         for (var i=0;i<data.length;++i)
         {
         $('#cand').append('<div class="name">data[i].name</>');
         }
        }
    });
});
Mohammed Abdelrasoul
la source
6

Utilisez ce code.

     $.ajax({

            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "Your URL",
            data: "{}",
            dataType: "json",
            success: function (data) {
                alert(data);
            },
            error: function (result) {
                alert("Error");
            }
        });
Shivam Srivastava
la source
6

ok j'ai eu le même problème et je le corrige comme ça en supprimant []de [{"key":"value"}]:

  1. dans votre fichier php, assurez-vous que vous imprimez comme ceci
echo json_encode(array_shift($your_variable));
  1. dans votre fonction de réussite, faites ceci
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

et aussi vous pouvez le boucler si vous le souhaitez

elaz
la source
5

Je suis d'accord avec toutes les solutions ci-dessus, mais pour souligner quelle est la cause première de ce problème, cet acteur majeur dans tout le code ci-dessus est cette ligne de code:

dataType:'json'

lorsque vous manquez cette ligne (qui est facultative), les données renvoyées par le serveur sont traitées comme une chaîne complète (qui est le type de retour par défaut). L'ajout de cette ligne de code informe jQuery de convertir la chaîne json possible en objet json.

Tous les appels jQuery ajax doivent spécifier cette ligne, s'ils attendent un objet de données json.

justnajm
la source
3
var jsonP = "person" : [ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ];

var cand = document.getElementById("cand");
var json_arr = [];
$.each(jsonP.person,function(key,value){
    json_arr.push(key+' . '+value.name  + '<br>');
    cand.innerHTML = json_arr;
});

<div id="cand">
</div>
Servesh Mishra
la source
2

Données Json

data = {"clo":[{"fin":"auto"},{"fin":"robot"},{"fin":"fail"}]}

Lors de la récupération

$.ajax({
  //type
  //url
  //data
  dataType:'json'
}).done(function( data ) {
var i = data.clo.length; while(i--){
$('#el').append('<p>'+data.clo[i].fin+'</>');
}
});
Guspan Tanadi
la source
0
$.ajax({
  url: '//.xml',
  dataType: 'xml',
  success: onTrue,
  error: function (err) {
      console.error('Error: ', err);
  }
});

$('a').each(function () {
  $(this).click(function (e) {
      var l = e.target.text;
      //array.sort(sorteerOp(l));
      //functionToAdaptHtml();
  });
});
Sarah Smith
la source