非常に基本的な質問だと思うが、運がないと答えてくれる時間を費やした。次のjsonオブジェクト(play!Frameworkを使用して生成)を受け取った。jqueryを使用してjsonオブジェクトを解析する方法
{
"preg.pregunta": [{
"message":"Debes escribir una pregunta",
"key":"preg.pregunta",
"variables":[]
}],
"preg":[{
"message": "validation.object",
"key":"preg",
"variables":[]
}]
}
これは私がすべての内部preg.pregunta
(message
とkey
値)を取得したいコード
$.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.
}
});
の私のjqueryの作品です
助け?
更新済み:私は自分自身に答えて十分な評判を持っていませんが、これはこれまで私が見つけたものです。
これは明らかかもしれませんが、もっと勉強しなければならないかもしれません。私は、jQueryがHTTPエラー(この場合は400)に伴って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
配列内の複数の値があった場合は、ループに必要とあなたの反復変数で[0]
に代わる
error: function(response) {
var pregunta = response["preg.pregunta"][0].message;
var key = response["preg.pregunta"][0].key;
},
:
こんにちは!私はこれまでに試したことがありませんでした。 "response ['preg.pregunta']は定義されていません。 –
以下を試してみると、コンソールには何が表示されますか:' console.log(response); '? –
こんにちは、私の答えはかなりシンプルです。私はplayframeworkバリデーターを使ってフィールドを検証しています。何かエラーが見つかった場合(例えばフィールドが空白の場合)、JSONとしてレンダリングされたvalidation.errorsMap()オブジェクトが返されますので、 400' ...だから私は 'error'ハンドラでそれを捕まえるのです。 –