JSON verilerini jQuery / JavaScript ile nasıl ayrıştırabilirim?


190

Böyle bir JSON döndüren bir AJAX çağrısı var:

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

#candDiv içinde alacağım:

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

Bu veriler arasında nasıl geçiş yapabilir ve her adı bir div'e nasıl yerleştirebilirim?

Yanıtlar:


283

Sunucu tarafı komut dosyanızın uygun Content-Type: application/jsonyanıt üstbilgisini ayarlamadığını varsayarsak , jQuery'ye dataType: 'json'parametresini kullanarak bunun JSON olduğunu belirtmeniz gerekir .

Sonra $.each()veriler arasında döngü için işlevi kullanabilirsiniz :

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

veya $.getJSONyöntemi kullanın :

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

başarısı. Teşekkürler. Ben php fonksiyonumdan bir şey gönderebilir json pr göndermek zorunda mıyım?
Patrioticcow

7
@Patrioticcow, JSON da gönderebilirsiniz. Bu durumda ayarlamak gerekir contentType: 'application/json'sizin ayarı $.ajaxfonksiyonu ve JSON seri hale databunun gibi, parametre: data: JSON.stringify({ get_param: 'value' }). Sonra php betiğinizde orijinal nesneyi geri almak için json kodunu çözmeniz gerekir.
Darin Dimitrov

Bu "tamamlandı: fonksiyon" nedir? Bu "başarı" ile aynı mı? Belgelerde görmüyorum.
Buttle Butkus

Json verilerim {"0":{"level1":"done","level2":"done","level3":"no"}}bunu her değişkene nasıl çıkarabilirim? $.eachyöntemi kullanarak böyle denedim ama tanımsız varlevel1 = ele[0].level1;
151291 5:16

@DarinDimitrov Bu veriler bir atlıkarınca önyüklemesinde nasıl gösterilir?
nideba

79

Ayar dataType:'json', JSON'u sizin için ayrıştırır:

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

Veya aşağıdakileri kullanabilirsiniz parseJSON:

var parsedJson = $.parseJSON(jsonToBeParsed);

Ardından aşağıdakileri tekrarlayabilirsiniz:

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

... kullanarak $().each:

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

JSFiddle


benim json verilerim {"0":{"level1":"done","level2":"done","level3":"no"}}nasıl bu her değişkenlere ayıklayabilirsiniz? $.eachyöntemi kullanarak böyle denedim ama tanımsız var döndürürlevel1 = ele[0].level1;
151291 5:16

1
@ 151291 bu sorunuzu sormak için uygun bir yol değil, yine de burada json için keman jsfiddle.net/fyxZt/1738 . Not dizisi notasyonujson[0]
Rafay

Teşekkür ederim. yardımcı cevap. Bir db tablosunda belirtilen sütun değeri nasıl alınır?
PHPFan

@PHPFastre tablosu nasıl sorgulanır? lütfen daha fazla bilgi verin ve gerekli ayrıntıları içeren yeni bir soru sormanızı tavsiye ederim.
Rafay

@Rafay, örneğin yalnızca ad değerlerini almak istiyorsanız bu soruda
PHPFan

24

Aşağıdaki kodu deneyin, benim projemde çalışır:

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

Bu kodu kullanın.

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

Tamam ben aynı problem vardı ve ben kaldırarak böyle düzeltmek []gelen [{"key":"value"}]:

  1. php dosyasında böyle yazdırmak shure olun
echo json_encode(array_shift($your_variable));
  1. başarı fonksiyonunuzda bunu yapın
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

ve ayrıca isterseniz döngü yapabilirsiniz


5

Yukarıdaki tüm çözümleri kabul ediyorum, ancak bu sorunun temel nedeninin ne olduğunu belirtmek için, yukarıdaki koddaki büyük rol oyuncusu bu kod satırıdır:

dataType:'json'

Bu satırı kaçırdığınızda (isteğe bağlı), sunucudan döndürülen veriler tam uzunlukta dize (varsayılan dönüş türü) olarak değerlendirilir. Bu kod satırını eklemek, jQuery'ye olası json dizesini json nesnesine dönüştürmesini bildirir.

Json veri nesnesi bekleniyorsa, herhangi bir jQuery ajax çağrısı bu satırı belirtmelidir.


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 verileri

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

Ne zaman alın

$.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();
  });
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.