6

非常に基本的な質問だと思いますが、運が悪かったので答えを探すのに何時間も費やしました。次の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関数を使用して解析する必要があります。

お役に立てれば!

4

1 に答える 1

2

これを試して:

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

配列内に複数の値がある場合は、ループして、反復変数にpreg.pregunta置き換える必要があります。[0]

errorまた、ハンドラーでのみ応答にアクセスしたい理由がよくわかりませんか?

最後に、JSON にアクセスするためのコードはネイティブの JavaScript です。これは、応答を受け取ったときに、応答が POJS オブジェクトに変換されているためです。jQuery は必要ありません。

于 2012-05-26T19:34:02.967 に答える