我認爲這是一個非常基本的問題,但我花了好幾個小時尋找答案,沒有運氣,我有下面的json對象(使用play!Framework生成)如何使用jquery解析json對象
{
"preg.pregunta": [{
"message":"Debes escribir una pregunta",
"key":"preg.pregunta",
"variables":[]
}],
"preg":[{
"message": "validation.object",
"key":"preg",
"variables":[]
}]
}
這是我的jQuery的代碼
$.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.
}
});
我想所有的內部preg.pregunta
(message
和key
值)
有什麼幫助嗎?
已更新:好吧,我沒有足夠的聲望回答自己,這是我迄今爲止發現的。
好吧,也許它會更明顯,或者我有更多的研究;我發現,如果jQuery響應HTTP錯誤(本例中爲400),jQuery不會正確解析JSON響應。
有人知道爲什麼會有這種行爲?
我剛剛在success
處理程序中測試了這段代碼,並且完美地工作!
$.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
}
});
修訂2.
搜索約2小時後,我發現一個簡單的解決方案:
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)
});
})
}
說明:使用錯誤處理程序時,jQuery的返回描述錯誤的複雜對象,responseText包含從服務器獲取的數據,因此,您必須使用parseJSON函數解析它。
希望這會有所幫助!
嗨!我已經嘗試過,但沒有成功,「響應['preg.pregunta']未定義」 –
當您嘗試以下操作時,您在控制檯中看到了什麼:'console.log(response);'? –
Hi Rory,我的回答很簡單;我正在使用playframework驗證器驗證字段,如果發現任何錯誤(例如字段爲空),則會返回一個呈現爲JSON的validation.errorsMap()對象,以便稍後使用它,此響應將返回「HTTP 400' ...所以這就是爲什麼我用'error'處理程序來捕獲它。 –