2011-02-23 59 views
34

我想用jQuery和JSON来执行一些基本的操作。目前,jQuery接受来自我的play framework应用程序的JSON响应有困难。下面是仍然产生错误的代码的简化版本。jQuery的JSON响应总是触发一个ParseError

$.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皮棉工具还验证。将dataType更改为“text”可以调用成功。但我试图使用isUsernameAvailable调用作为jQuery验证插件的一部分,所以我需要它返回有效的JSON。

+0

你确定响应是application/json类型(我认为答案是肯定的)),而你的json就像{“field”:“value”,...} ...双引号有时候重要的是,如果你的值是字符串类型,而不是布尔或int ...并且没有孤立“,”... 无论如何,你似乎有一个解决方法! – mandubian 2011-02-24 09:37:27

+0

在你的问题中,我的回答是...我的PHP使用回声简单的文本给回来,所以改变我的dataType'文本'做了这项工作。谢谢:) – Pitto 2013-08-06 07:43:00

回答

33

也许我误解了,但是不能将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可以将ContentType类型头文件中的数据类型转换为您需要的数据类型,例如,如果您希望将文本响应视为XML,请使用” text xml“作为dataType。”也许你可以尝试“文本JSON”。

+0

这可能是我需要去的方向。我需要使用“json”的原因是因为我使用的jQuery Validation插件需要远程验证才能返回JSON。 – Chesrae 2011-02-23 18:37:15

+5

我只是看了一下http://api.jquery.com/jQuery.ajax/,看起来像使用jQuery 1.5,你可以进行类型转换。 “多个空间分隔值:从jQuery 1.5开始,jQuery可以将ContentType类型头文件中的数据类型转换为您需要的数据类型,例如,如果您希望将文本响应视为XML,请使用” text xml“作为dataType。”也许你可以尝试“文本JSON”。 – ggutenberg 2011-02-23 18:39:47

+2

我刚刚在jQuery验证插件代码本身中将“json”更改为“text json”,并且一切正常。谢谢你的回答,但我仍然困惑为什么“json”不工作。 Content-Type标头设置为application/json。 – Chesrae 2011-02-23 18:44:57

12

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

关于jQuery的验证插件不兼容这里的更多信息: http://bugs.jquery.com/ticket/8118

+0

这花了我一段时间才发现,这是jquery.validate中的问题。 – 2011-04-07 06:49:58

+1

jQuery验证的新版本(1.8)修复了这个问题,并且与jQuery 1.5.x兼容。更多信息请访问:http://jquery.bassistance.de/validate/changelog.txt – 2011-04-08 20:26:20

+0

这确实是正确答案,应该标记为这样。谢谢JonnyO! – Dav 2011-04-13 09:49:54

3

我也得到了“parsererror jQueryNNNN_NNN当时不叫”(使用JSONP和jQuery 1.7.2) 的原因是,在值的一个返回的json结构包含换行符。 希望这可以帮助别人。

2

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

正如我的服务器端的REST API从JSONP改为JSON,数据格式返回从它不再兼容jQuery.getJSON(..)callback=?。在这种情况下,jQuery.getJSON(..)将不会调用success回调,而是调用fail回调。

我解决了这个问题,通过从url参数中删除callback=?部分。