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?

Patrioticcow
sumber

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
        }));
    });
});
Darin Dimitrov
sumber
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

Rafay
sumber
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+'</>');
        }
    }
});
Sarabhaiah Polakam
sumber
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
sumber
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");
            }
        });
Shivam Srivastava
sumber
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

Elaz
sumber
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.

justnajm
sumber
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
sumber
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+'</>');
}
});
Guspan Tanadi
sumber
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
sumber