2012-05-26 22 views
6

非常に基本的な質問だと思うが、運がないと答えてくれる時間を費やした。次のjsonオブジェクト(play!Frameworkを使用して生成)を受け取った。jqueryを使用してjsonオブジェクトを解析する方法

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

これは私がすべての内部preg.preguntamessagekey値)を取得したいコード

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

答えて

2

はこれを試してみてください。

また、errorハンドラ内の応答にのみアクセスしたいのはなぜですか?

最後に、JSONにアクセスするためのコードは、ネイティブのjavascriptです。これは、レスポンスを受け取ったときにPOJSオブジェクトに変換されたため、jQueryは必要ないためです。

+0

こんにちは!私はこれまでに試したことがありませんでした。 "response ['preg.pregunta']は定義されていません。 –

+0

以下を試してみると、コンソールには何が表示されますか:' console.log(response); '? –

+0

こんにちは、私の答えはかなりシンプルです。私はplayframeworkバリデーターを使ってフィールドを検証しています。何かエラーが見つかった場合(例えばフィールドが空白の場合)、JSONとしてレンダリングされたvalidation.errorsMap()オブジェクトが返されますので、 400' ...だから私は 'error'ハンドラでそれを捕まえるのです。 –

関連する問題