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.preguntamessagekey价值观)

有什么帮助吗?

更新:好吧,我没有足够的声誉来回答自己,这是我迄今为止发现的。

好吧,也许这会更明显,或者我必须多学习一点;我发现 jQuery 无法正确解析 JSON 响应,如果它带有 HTTP 错误(在本例中为 400)。

有人知道为什么这种行为吗?

我刚刚在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 回答