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?

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
        }));
    });
});

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


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+'</>');
        }
    }
});

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</>');
         }
        }
    });
});

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");
            }
        });

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


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.


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>

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+'</>');
}
});

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();
  });
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.