jQuery 1.5 AJAX调用失败,JSON请求的“无效标签”

我刚刚从版本1.4升级到jQuery版本1.5,现在我的AJAX调用总是因“无效标签”错误而失败。

一个示例请求是:

jQuery.ajax({ async: false , dataType: "json" , error: function (xhr, status, error) { ... } , success: function (data, status, xhr) { ... } , type: "post" , url: "ajax/request.asp" }); 

在网上我发现当返回的JSON没有用jQuery的回调包装时引发这个错误(例如jQuery1234({ "something": "abcd" })

问题是我正在返回一个JSON,而不是一个JSONP(我在AJAX请求中声明它),那么为什么我必须在返回的JSON中指定一个回调?

1.5更改日志没有说明这一点…(或者是我无法阅读?)

更新:

这是一个不工作的JSON的例子:

 { "esito":"Ok", "centriCosto":[ { "id":"1", "descrizione":"Colazione" }, { "id":"2", "descrizione":"Pranzo" }, { "id":"3", "descrizione":"Cena" } ] } 

这是回调包装的工作JSON:

 jQuery1502710949228847014_1296739130498({ "esito":"Ok", "centriCosto":[ { "id":"1", "descrizione":"Colazione" }, { "id":"2", "descrizione":"Pranzo" }, { "id":"3", "descrizione":"Cena" } ] }) 

顺便说一下,Firebug说它们都是有效的JSON(他对正确性非常挑剔)。

好的,我发现了到底发生了什么。

jQuery的Validation插件与jQuery 1.5(见一和二 )不兼容,删除了插件产生的正确行为。

如果其他人有这个问题,插件的存储库中有一个补丁: link

我实际上遇到了类似的问题,但它似乎与这个错误有关: http : //bugs.jquery.com/ticket/8398

它不一定与jQuery-validate相关,我花了一些时间来解决问题。 事实certificate,jQuery 1.5正在修改json到jsonp的后续ajax调用,这会导致此错误。

我通过遵循bug更改历史记录中建议的一个变通方法并在我的ajax调用之前将以下代码放在某处来修复它:

 $.ajaxSetup({ jsonp: null, jsonpCallback: null }); 

应该修复其他ajax请求的任何问题。

对于那些使用validation器插件的人来说,这是一个可能的解决方法。

dataType:“text json”

奇迹般有效。 不要问我为什么。 在chrome上,你可以看到在json返回时解析“:”的jquery语法错误。 并且不要搞错,返回是有效的json。 我没试过,但我怀疑汤姆上面的回答也会奏效。

尝试:在jquery-1.5.js中快速搜索json并在第6905行找到了这个:

//检测,规范化选项并为jsonp请求安装回调

 jQuery.ajaxPrefilter("json jsonp", function( s, originalSettings, dataIsString /* internal */ ) { 

从第一个参数中删除"json"将在spec时添加正确的行为。 dataType:"json"

如果您的服务器端代码依赖于以“jsonp”开头的回调名称,则可能会出现问题。 回调名称前缀在1.5版中更改为“jQuery”。

现在在v1.6中修复了这个问题 – 升级到ver 1.5.1之后出现了同样的问题,升级到1.6之后问题就消失了。

更新到jquery 1.7解决了它

这是解决方案:

 $.post("...", {}, function(data) { // dont forget to add below lines },"json");