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

Alb*_*reo 10 jquery json jquery-1.5

我刚刚从版本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"
});
Run Code Online (Sandbox Code Playgroud)

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

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

1.5的changelog没有提到这个...(或者是我谁也看不懂?)

更新:

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

{
   "esito":"Ok",
   "centriCosto":[
      {
         "id":"1",
         "descrizione":"Colazione"
      },
      {
         "id":"2",
         "descrizione":"Pranzo"
      },
      {
         "id":"3",
         "descrizione":"Cena"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

这是回调包装的工作JSON:

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

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

Alb*_*reo 28

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

jQuery的Validation插件与jQuery 1.5不兼容(参见),删除了插件产生的正确行为.

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


Tom*_*Tom 5

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

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

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

$.ajaxSetup({
   jsonp: null,
   jsonpCallback: null
});
Run Code Online (Sandbox Code Playgroud)

应该解决其他ajax请求的任何问题.