Bagaimana cara mengurai data JSON dengan jQuery / JavaScript?


190

Saya memiliki panggilan AJAX yang mengembalikan beberapa JSON seperti ini:

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

Di dalam #canddiv saya akan mendapatkan:

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

Bagaimana saya bisa mengulang data ini dan menempatkan setiap nama dalam div?

Jawaban:


283

Dengan asumsi skrip sisi server Anda tidak mengatur Content-Type: application/jsontajuk respons yang tepat, Anda perlu menunjukkan ke jQuery bahwa ini adalah JSON dengan menggunakan dataType: 'json'parameter.

Kemudian Anda bisa menggunakan $.each()fungsi untuk mengulang data:

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

atau gunakan $.getJSONmetode:

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});

keberhasilan. Terima kasih. APAKAH saya harus mengirim json pr saya dapat mengirim apa pun dari fungsi php saya?
Patrioticcow

7
@Patrioticcow, Anda dapat mengirim JSON juga. Dalam hal ini Anda akan perlu mengatur contentType: 'application/json'pengaturan di Anda $.ajaxfungsi dan JSON cerita bersambung dataparameter, seperti itu: data: JSON.stringify({ get_param: 'value' }). Kemudian dalam skrip php Anda, Anda perlu json decode untuk mendapatkan kembali objek asli.
Darin Dimitrov

Apa ini "selesai: fungsi"? Apakah itu sama dengan "sukses"? Saya tidak melihatnya di dokumen.
Buttle Butkus

Data json saya adalah {"0":{"level1":"done","level2":"done","level3":"no"}}bagaimana cara mengekstrak ini ke dalam setiap variabel? saya mencoba seperti ini menggunakan $.eachmetode tetapi mengembalikan var tidak terdefinisilevel1 = ele[0].level1;
151291

@DarinDimitrov Bagaimana menampilkan data ini di bootstrap korsel?
nideba

79

Pengaturan dataType:'json'akan mengurai JSON untuk Anda:

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

Atau Anda dapat menggunakan parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Kemudian Anda dapat mengulangi yang berikut ini:

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

... dengan menggunakan $().each:

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

JSFiddle


Data json saya adalah {"0":{"level1":"done","level2":"done","level3":"no"}}bagaimana cara mengekstrak ini ke dalam setiap variabel? saya mencoba seperti ini menggunakan $.eachmetode tetapi mengembalikan var tidak terdefinisilevel1 = ele[0].level1;
151291

1
@ 151291 itu bukan cara yang tepat untuk mengajukan pertanyaan Anda, toh di sini adalah biola jsfiddle.net/fyxZt/1738 untuk json Anda. Notasi array notjson[0]
Rafay

Terima kasih. jawaban yang bermanfaat. Bagaimana cara mendapatkan nilai kolom yang ditentukan dalam tabel db?
PHPFan

@PHPFan maksudmu bagaimana cara menanyakan tabel database? tolong berikan lebih banyak informasi dan saya akan merekomendasikan mengajukan pertanyaan baru, dengan rincian yang diperlukan disertakan.
Rafay

@ Rafay misalnya dalam pertanyaan ini jika saya ingin mendapatkan nilai nama saja
PHPFan

24

Coba kode berikut, ini berfungsi di proyek saya:

//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

Gunakan kode itu.

     $.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 saya punya masalah yang sama dan saya memperbaikinya seperti ini dengan menghapus []dari [{"key":"value"}]:

  1. di file php Anda buat shure yang Anda cetak seperti ini
echo json_encode(array_shift($your_variable));
  1. dalam fungsi kesuksesan Anda, lakukan ini
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

dan juga Anda dapat mengulanginya jika Anda mau


5

Saya setuju dengan semua solusi di atas, tetapi untuk menunjukkan apa penyebab utama dari masalah ini adalah, bahwa pemain peran utama dalam semua kode di atas adalah baris kode ini:

dataType:'json'

ketika Anda melewatkan baris ini (yang opsional), data yang dikembalikan dari server diperlakukan sebagai string panjang penuh (yang merupakan tipe pengembalian default). Menambahkan baris kode ini menginformasikan jQuery untuk mengonversi string json yang mungkin menjadi objek json.

Setiap panggilan ajax jQuery harus menentukan baris ini, jika mengharapkan objek data 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

Data json

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

Saat mengambil

$.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();
  });
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.