非常に基本的な質問だと思いますが、運が悪かったので答えを探すのに何時間も費やしました。次のjsonオブジェクト(play!Frameworkを使用して生成)があります。
{
"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
値)に入れたい
何か助けはありますか?
更新:まあ、私は自分自身に答えるのに十分な評判がありません、これは私がこれまでに見つけたものです。
わかりました、多分それは明白以上であるか、私はもう少し勉強しなければなりません。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関数を使用して解析する必要があります。
お役に立てれば!