Jak parsować dane JSON za pomocą jQuery / JavaScript?

190

Mam wywołanie AJAX, które zwraca trochę JSON w następujący sposób:

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

Wewnątrz #canddiv dostanę:

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

Jak mogę przeglądać te dane i umieszczać każdą nazwę w div?

Patrioticcow
źródło

Odpowiedzi:

282

Zakładając, że skrypt po stronie serwera nie ustawia prawidłowego Content-Type: application/jsonnagłówka odpowiedzi, musisz wskazać jQuery, że jest to JSON za pomocą dataType: 'json'parametru.

Następnie możesz użyć $.each()funkcji do przechodzenia między danymi:

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

lub użyj $.getJSONmetody:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});
Darin Dimitrov
źródło
sukces. dzięki. Czy muszę wysyłać JSON, że mogę wysyłać cokolwiek z mojej funkcji PHP?
Patrioticcow
7
@Patrioticcow, możesz również wysłać JSON. W tym przypadku trzeba będzie ustawić contentType: 'application/json'ustawienie w swojej $.ajaxfunkcji i JSON serializacji dataparametr, tak: data: JSON.stringify({ get_param: 'value' }). Następnie w skrypcie php musisz dekodować json, aby odzyskać oryginalny obiekt.
Darin Dimitrov
Co to jest „zrobione: funkcja”? Czy to to samo co „sukces”? Nie widzę tego w dokumentach.
Buttle Butkus
Moje dane JSON to {"0":{"level1":"done","level2":"done","level3":"no"}}jak wyodrębnić to do każdej zmiennej? próbowałem w ten $.eachsposób przy użyciu metody, ale zwraca niezdefiniowany varlevel1 = ele[0].level1;
151291
@DarinDimitrov Jak wyświetlić te dane w bootstrapie karuzelowym?
nideba
79

Ustawienie dataType:'json'przeanalizuje dla Ciebie JSON:

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

Albo możesz użyć parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Następnie możesz powtórzyć następujące czynności:

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

... za pomocą $().each:

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

JSFiddle

Rafay
źródło
moje dane JSON to {"0":{"level1":"done","level2":"done","level3":"no"}}jak można to wyodrębnić do każdej zmiennej? próbowałem w ten $.eachsposób przy użyciu metody, ale zwraca niezdefiniowany varlevel1 = ele[0].level1;
151291
1
@ 151291 to nie jest właściwy sposób zadawania pytań, w każdym razie tutaj jest skrzypce jsfiddle.net/fyxZt/1738 dla twojego jsona . Uwaga notacja tablicowajson[0]
Rafay
Dziękuję Ci. pomocna odpowiedź. Jak uzyskać określoną wartość kolumny w tabeli db?
PHPFan
@PHP Czy masz na myśli, jak wykonać zapytanie do tabeli bazy danych? proszę podać więcej informacji i polecam zadać nowe pytanie, w tym niezbędne szczegóły.
Rafay
@Rafay na przykład w tym pytaniu, jeśli chcę uzyskać tylko wartości nazw
PHPFan
24

Wypróbuj następujący kod, działa w moim projekcie:

//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
źródło
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
źródło
6

Użyj tego kodu.

     $.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
źródło
5

ok, miałem ten sam problem i naprawiłem go w ten sposób, usuwając []z [{"key":"value"}]:

  1. w pliku php upewnij się, że drukujesz w ten sposób
echo json_encode(array_shift($your_variable));
  1. w funkcji sukcesu zrób to
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

a także możesz zapętlić go, jeśli chcesz

elaz
źródło
5

Zgadzam się ze wszystkimi powyższymi rozwiązaniami, ale aby wskazać, jaka jest podstawowa przyczyna tego problemu, główną rolę w powyższym kodzie odgrywa następujący wiersz kodu:

dataType:'json'

gdy przegapisz ten wiersz (który jest opcjonalny), dane zwrócone z serwera są traktowane jako ciąg pełnej długości (który jest domyślnym typem zwrotu). Dodanie tego wiersza kodu informuje jQuery, aby przekonwertować możliwy ciąg json na obiekt json.

Wszelkie wywołania jQuery ajax powinny określać ten wiersz, jeśli oczekuje się obiektu danych json.

justnajm
źródło
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
źródło
2

Dane Json

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

Podczas pobierania

$.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
źródło
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
źródło