jQuery JSON响应总是触发一个解析错误
我正在尝试使用jQuery和JSON执行一些基本操作。目前,jQuery很难从我的play框架应用程序接受JSON响应。下面是仍然产生错误的代码的简化版本jQuery JSON响应总是触发一个解析错误,jquery,json,playframework,Jquery,Json,Playframework,我正在尝试使用jQuery和JSON执行一些基本操作。目前,jQuery很难从我的play框架应用程序接受JSON响应。下面是仍然产生错误的代码的简化版本 $.ajax({ type: 'POST', url: "@{FrontEnd.isUsernameAvailable()}", data: "name=thisnameisavailable", cache: false, success: function(data) { conso
$.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 JQuery1500199723899904205_1298484897373
通过Firebug检查返回的JSON不会显示任何错误,各种JSON lint工具也会进行验证。将数据类型更改为“text”可以调用success。但是我尝试使用isUsernameAvailable调用作为jQuery验证插件的一部分,因此我需要它来返回有效的JSON。也许我有误解,但是您不能将
数据类型设置为文本并将返回的数据设置为JSON.parse()
success: function(data) {
data = JSON.parse(data);
// process data
},
编辑以添加普遍同意的解决方案(以前仅为注释):
我刚刚看了一下,它看起来像是使用jQuery1.5可以进行排序类型转换。“多个空格分隔的值:从jQuery 1.5开始,jQuery可以将一个数据类型从它在内容类型头中接收的数据类型转换为您需要的数据类型。例如,如果您希望将文本响应视为XML,请使用“文本XML”作为数据类型。“也许您可以尝试使用“文本json”。我在升级到jQuery 1.5后就收到了相同的错误。”。事实证明,我的问题是因为我还使用了jquery验证插件,它与jquery 1.5不兼容。如果删除jquery验证插件,$.ajax()和数据类型json可以正常工作
有关jquery验证插件不兼容的更多信息,请参见:
我还得到了“parsererror JQuerynnn\u NNN没有被调用”(使用jsonp和jQuery 1.7.2)
原因是返回的json结构中的一个值包含换行符。
希望这对某人有所帮助。我得到了parseerror
,因为url
包含回调=?
部分
当我的服务器端的RESTAPI从JSONP更改为JSON时,从它返回的数据格式不再与jQuery.getJSON(..)
和callback=?
兼容。在这种情况下,jQuery.getJSON(..)
不会调用success
回调,而是调用fail
回调
通过从url
参数中删除callback=?
部分,我解决了这个问题。这可能是我需要遵循的方向。我之所以“需要”使用“json”,是因为我正在使用的jQuery验证插件需要远程验证才能返回json。我刚才看了一下,jQuery 1.5似乎可以进行排序类型转换。“多个空格分隔的值:从jQuery 1.5开始,jQuery可以将一个数据类型从它在内容类型头中接收的内容转换为您需要的内容。例如,如果您希望将文本响应视为XML,请使用“文本XML”作为数据类型。“也许您可以尝试使用“文本json”。我刚刚将“json”更改为“文本json”在jQuery验证插件代码中,一切都完美地工作。谢谢你的回答,但我仍然不明白为什么“json”不起作用。内容类型标题被设置为application/json。今天的问题相同,不兼容的验证插件是原因,在本例中,是ASP.NET MVC3.dosboy附带的插件,您应该在答案中添加注释,dude。这救了我几个小时的。。。有问题和答案指向另一个方向!我花了一段时间才发现,这就是问题所在,jquery.validate中的冲突。jquery验证的新版本(1.8)修复了这个问题,并且与jquery 1.5.x兼容。更多信息请访问:这确实是正确答案,应标记为正确答案。谢谢JonnyO!非常感谢。我已经为此争论了两个小时,试图找出我做错了什么。@吉姆:我下载了新版本的jQuery验证,如果使用jQuery.validate.min.js文件,问题仍然存在。如果您使用jquery.validate.js文件,它似乎可以工作。您确定响应的类型是application/json(我认为答案是yes;),并且您的json类似于{“field”:“value”,…}。。。如果您的值是字符串类型的,而不是布尔值或int值,则双引号有时很重要。。。没有孤儿“,”。。。不管怎样,你似乎有一个解决办法!在你的问题中,我的回答是。。。我的php使用echo简单文本返回,所以将我的数据类型更改为“text”就完成了任务。谢谢:)