jQuery JSON响应总是触发ParseError

时间:2011-02-23 18:27:43

标签: jquery json playframework

我正在尝试使用jQuery和JSON执行一些基本操作。目前在jQuery接受来自我的播放框架应用程序的JSON响应时遇到困难。下面是仍然产生错误的代码的简化版本。

$.ajax({
    type: 'POST',
    url: "@{FrontEnd.isUsernameAvailable()}",
    data: "name=thisnameisavailable",
    cache: false,
    success: function(data) {
        console.log("Success... ");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("Error... " + textStatus + "        " + errorThrown);
    },
    dataType: 'json'
});

始终触发错误回调。它显示

  

错误... parsererror jQuery15001997238997904205_1298484897373未被调用

通过Firebug检查返回的JSON显示没有错误,各种JSON lint工具也验证。将dataType更改为“text”会调用成功。但我试图使用isUsernameAvailable调用作为jQuery验证插件的一部分,所以我需要它来返回有效的JSON。

4 个答案:

答案 0 :(得分:34)

也许我误解了,但你不能将dataType设置为text和JSON.parse()返回数据吗?

success: function(data) {
    data = JSON.parse(data);
    // process data
},

编辑添加一般商定的解决方案(以前只是评论):

我刚看了api.jquery.com/jQuery.ajax,看起来像jQuery 1.5,你可以进行各种类型的转换。 “多个,空格分隔的值:从jQuery 1.5开始,jQuery可以将dataType从Content-Type标头中收到的内容转换为您需要的内容。例如,如果您希望将文本响应视为XML,请使用” text xml“for dataType。”也许你可以尝试“文字json”。

答案 1 :(得分:12)

升级到jQuery 1.5后,我得到了同样的错误。事实证明我的问题是因为我也在使用jquery验证插件,它与jQuery 1.5不兼容。如果我删除了jquery验证插件,带有dataType json的$ .ajax()可以正常工作。

有关jquery验证插件不兼容的更多信息,请访问: http://bugs.jquery.com/ticket/8118

答案 2 :(得分:3)

我也得到了“parsererror jQueryNNNN_NNN未被调用”(使用jsonp和jQuery 1.7.2) 原因是返回的json结构中的一个值包含换行符。 希望这有助于某人。

答案 3 :(得分:2)

我得到parseerror,因为url包含callback=?部分。 This is a magic string which activates JSONP functionality

由于我的服务器端REST API已从JSONP更改为JSON,因此从其返回的数据格式不再与带有jQuery.getJSON(..) callback=?兼容。在这种情况下,jQuery.getJSON(..)不会调用success回调,而是调用fail回调。

我通过从callback=?参数中删除url部分来解决此问题。