2012-05-26 16 views
6

Bunun çok basit bir soru olduğunu düşünüyorum, ancak şanssız bir cevap aramak için saatler harcadım, aşağıdaki json nesnesini kullanıyorum (oyun kullanarak oluşturuldu! Çerçeve)jquery kullanarak bir json nesnesini nasıl ayrıştırılır

{ 
    "preg.pregunta": [{ 
     "message":"Debes escribir una pregunta", 
     "key":"preg.pregunta", 
     "variables":[] 
    }], 
    "preg":[{ 
     "message": "validation.object", 
     "key":"preg", 
     "variables":[] 
    }] 
} 

Bu kodun benim jquery parçasıdır

Ben

tüm iç preg.pregunta ( message ve key değerler) almak istiyorum
$.ajax({ 
    type: $target.attr('method'), 
    data: dataString, 
    url:$target.attr('action'), 
    dataType: "json", 
    beforeSend: function() { 
     //some stuff 
    }, 
    success:function(response){ 
     //some stuff 
    }, 
    error: function(response){ 
     //I want to use the json response here. 
    } 
}); 

210 Herhangi bir yardım?

GÜNCELLEME: Kendime cevap vermek için yeterli bir itibarım yok, bu şimdiye kadar bulduğum şey.

Tamam belki de daha açık olurdu ya da biraz daha fazla çalışmam gerekiyor; JQuery bir HTTP hatası (400 bu durumda) ile birlikte geldi eğer bir JSON yanıtı düzgün ayrıştırmak değil buldum.

Birisi neden bu davranışı biliyor?

Bu kodu success işleyicisinde test ettim ve mükemmel çalışıyor!

$.ajax({ 
    type: $target.attr('method'), 
    data: dataString, 
    url:$target.attr('action'), 
    dataType: "json", 
    beforeSend: function() { 
    }, 
    success:function(response){ 
    //It is working perfectly! 
    $.each(response,function(object){ //first loop of the object 
     $.each(response[object],function(values){ //looping inside arrays 
     console.log(response[object][values].key) //getting value "key" 
     console.log(response[object][values].message) //getting value "message" 
     }); 
    }) 
    }, 
    error: function(response){ 
    //nothing happens here 
    } 
}); 

yaklaşık 2 saat arama sonra

2. GÜNCEL, bir basit çözüm bulduk:

error: function(response){ 
//Note the jQuery.parseJSON function 
var response = jQuery.parseJSON(response.responseText); 
    $.each(response,function(object){ 
    $.each(response[object],function(values){ 
     console.log(response[object][values].key) 
     console.log(response[object][values].message) 
    }); 
    }) 
} 

Açıklama: hata işleyicisi kullanıldığında jQuery hatasını açıklayan bir kompleks nesnesi geri gönderir , responseText sunucudan alınan verileri içerir, bu nedenle parseJSON işlevini kullanarak ayrıştırmanız gerekir.

Bu yardımcı olur umarız!

cevap

2

bu deneyin: preg.pregunta dizisi içinde birden çok değerin olsaydı

error: function(response) { 
    var pregunta = response["preg.pregunta"][0].message; 
    var key = response["preg.pregunta"][0].key; 
}, 

, sen döngü gerekir ve yineleme değişkeni ile [0] değiştirin.

Ayrıca, yalnızca neden yalnızca error işleyicisindeki yanıtlara erişmek istediğinizi anlamıyorum?

Son olarak, JSON'a erişim kodu yerel javascript'tir. Bunun nedeni, yanıtı aldığınızda POJS nesnesine dönüştürüldüğü için jQuery gerekmez.

+0

Merhaba! Başarısız ile daha önce denedim, "response ['preg.pregunta'] undefined" –

+0

Aşağıdakileri denediğinizde konsolda ne görüyorsunuz: 'console.log (response);'? –

+0

Merhaba Rory, cevabım gayet basit; Playframework validators kullanarak bir alanı doğrularıyorum, Herhangi bir hata bulunursa (örneğin bir alan boş) oynatma, daha sonra kullanabilmem için JSON olarak oluşturulan bir validation.errorsMap() nesnesini döndürür, bu yanıt bir 'HTTP ile döner. 400' ... yani bu yüzden 'error' işleyicisi ile yakaladım. –

İlgili konular