วิธีการวิเคราะห์ข้อมูล JSON ด้วย jQuery / JavaScript


190

ฉันมีการโทร AJAX ที่ส่งคืน JSON บางอย่างเช่นนี้:

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

ข้างใน #cand div ฉันจะได้รับ:

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

ฉันจะวนรอบข้อมูลนี้และวางชื่อแต่ละชื่อใน div ได้อย่างไร

คำตอบ:


282

สมมติว่าสคริปต์ฝั่งเซิร์ฟเวอร์ของคุณไม่ได้ตั้งค่าหัวข้อการContent-Type: application/jsonตอบสนองที่เหมาะสมคุณจะต้องระบุให้ jQuery ว่านี่คือ JSON โดยใช้dataType: 'json'พารามิเตอร์

จากนั้นคุณสามารถใช้$.each()ฟังก์ชันเพื่อวนซ้ำข้อมูล:

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

หรือใช้$.getJSONวิธีการ:

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

ความสำเร็จ ขอบคุณ ฉันต้องส่ง json pr ฉันสามารถส่งอะไรจากฟังก์ชั่น php ของฉันได้หรือไม่?
Patrioticcow

7
@Patrioticcow คุณสามารถส่ง JSON ได้เช่นกัน ในกรณีนี้คุณจะต้องตั้งค่าcontentType: 'application/json'การตั้งค่าของคุณใน$.ajaxการทำงานและ JSON เป็นอันดับพารามิเตอร์เช่นว่า:data data: JSON.stringify({ get_param: 'value' })จากนั้นในสคริปต์ PHP ของคุณคุณจะต้องถอดรหัส json เพื่อให้ได้วัตถุต้นฉบับกลับมา
ดารินทร์ดิมิทรอฟ

สิ่งนี้ "เสร็จแล้ว: ฟังก์ชั่น"? เหมือนกับความสำเร็จหรือไม่? ฉันไม่เห็นมันในเอกสาร
Buttle Butkus

ข้อมูล json ของฉันเป็น{"0":{"level1":"done","level2":"done","level3":"no"}}วิธีการแยกนี้ลงในแต่ละตัวแปร? ฉันพยายามเช่นนี้โดยใช้$.eachวิธีการ แต่กลับไม่ได้กำหนด varlevel1 = ele[0].level1;
151291

@DarinDimitrov วิธีการแสดงข้อมูลเหล่านี้ใน bootstrap แบบหมุน?
nideba

79

การตั้งค่าdataType:'json'จะแยก JSON ให้คุณ:

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

มิฉะนั้นคุณสามารถใช้parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

จากนั้นคุณสามารถทำซ้ำต่อไปนี้:

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

... โดยใช้$().each:

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

JSFiddle


ข้อมูล json ของฉันเป็น{"0":{"level1":"done","level2":"done","level3":"no"}}วิธีที่จะแยกสิ่งนี้ลงในแต่ละตัวแปร? ฉันพยายามเช่นนี้โดยใช้$.eachวิธีการ แต่กลับไม่ได้กำหนด varlevel1 = ele[0].level1;
151291

1
@ 151291 นั่นไม่ใช่วิธีที่ถูกต้องในการถามคำถามของคุณแล้วนี่คือซอjsfiddle.net/fyxZt/1738สำหรับ json ของคุณ สัญกรณ์อาร์เรย์หมายเหตุjson[0]
Rafay

ขอบคุณ. คำตอบที่เป็นประโยชน์ วิธีรับค่าคอลัมน์ที่ระบุในตาราง db?
PHPFan

@PHPFan คุณหมายถึงวิธีสืบค้นตารางฐานข้อมูลหรือไม่ โปรดให้ข้อมูลเพิ่มเติมและฉันขอแนะนำให้ถามคำถามใหม่พร้อมรายละเอียดที่จำเป็น
Rafay

@Rafay ตัวอย่างเช่นในคำถามนี้ถ้าฉันต้องการรับค่าชื่อเท่านั้น
PHPFan

24

ลองใช้รหัสต่อไปนี้มันใช้งานได้ในโครงการของฉัน:

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

ใช้รหัสนั้น

     $.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

ตกลงฉันมีปัญหาเดียวกันและฉันแก้ไขได้โดยลบ[]จาก[{"key":"value"}]:

  1. ในไฟล์ php ของคุณให้แน่ใจว่าคุณพิมพ์แบบนี้
echo json_encode(array_shift($your_variable));
  1. ในฟังก์ชั่นความสำเร็จของคุณทำสิ่งนี้
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

และคุณสามารถวนซ้ำได้ถ้าคุณต้องการ


5

ฉันเห็นด้วยกับการแก้ปัญหาทั้งหมดข้างต้น แต่เพื่อชี้ให้เห็นว่าอะไรคือสาเหตุของปัญหานี้ผู้เล่นบทบาทสำคัญในรหัสข้างต้นทั้งหมดคือรหัสบรรทัดนี้:

dataType:'json'

เมื่อคุณพลาดบรรทัดนี้ (ซึ่งเป็นตัวเลือก) ข้อมูลที่ส่งคืนจากเซิร์ฟเวอร์จะถือเป็นสตริงที่มีความยาวเต็ม (ซึ่งเป็นประเภทการคืนค่าเริ่มต้น) การเพิ่มบรรทัดของโค้ดนี้แจ้งให้ jQuery ทำการแปลงสตริง json ที่เป็นไปได้ให้เป็นออบเจ็กต์ json

การเรียก jQuery ajax ใด ๆ ควรระบุบรรทัดนี้หากต้องการวัตถุข้อมูล 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

ข้อมูล Json

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

เมื่อดึงข้อมูล

$.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();
  });
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.