为每个输入字段分割json数组响应

时间:2013-08-13 05:24:04

标签: javascript jquery ajax

对不起,重新发布我只是非常需要它,这很重要! 我有其他相同的帖子,但我标记了问题的答案,我仍然没有弄清楚如何解决!

我有这个ajax回复:

[{"error":"uname","message":" \u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9 \u05d0\u05d9\u05e0\u05d5 \u05d9\u05db."},{"error":"email","message":" \u05d0\u05e0\u05d0 \u05d4\u05db\u05e0\u05e1 \u05d0\u05d9\u05de\u05d9\u05dc"},{"error":"password","message":" \u05e9\u05d3\u05d4 \u05d6\u05d47"},{"error":"oldpassinp","message":" \u05d4\u05e7\u05e9 \u05e1\u05d9\u05e1\u05de\u05d0 \u05e9\u05dc."}]

和我的输入字段如下:

<input type="text" id="fname" name="fname" value="" class="inplaceError"/><span id="fname_error"></span>

跨度包含消息错误。

我在客户端使用它:

 var data_array = JSON.parse("["+data+"]");
 // tryed either var data_array = JSON.parse(data); not working too

  for (var i in data_array )
  {
     $("#"+data_array[i].error+"_error").html(data_array[i].message);
     $("#"+data_array[i].error).css({"border":"1px solid red"});
  }    

该代码有什么问题?它不会为每个字段添加错误,请帮助。

我是javascript新手。

2 个答案:

答案 0 :(得分:3)

如果ajax请求是数据类型:'json'那么响应将是一个json数组

$.each(data, function(idx, error){
    $("#"+error.error+"_error").html(error.message);
})

答案 1 :(得分:1)

JSON.parse仅在您收到需要转换为JSON对象的JSON字符串时使用。在您的示例中,您将提供JSON对象。如果您在ajax请求的响应中收到JSON,则不需要解析。

如果是这种情况,那么您也不需要将数据包装在括号中,尤其是使用字符串连接。

在这种情况下,您可以迭代JSON对象本身,如下所示:

for(var i in data) {
    $("#"+ data[i].error+"_error").html(data[i].message);
    $("#"+ data[i].error).css({"border":"1px solid red"});
}

此外,您的JSON示例数据看起来没有fname密钥,这可能会导致您的挫败感(我只看到uname)。

如下所述,您也可以使用jQuery的每个方法进行迭代,但for循环就足够了。

我希望有所帮助。