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?

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

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


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

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

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

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


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.


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

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

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();
  });
});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.