我正在尝试使用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。
答案 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
部分来解决此问题。