【发布时间】:2011-02-03 13:09:40
【问题描述】:
我刚刚从 jQuery 的 1.4 版升级到 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 changelog 对此只字未提……(或者是我看不懂?)
更新:
这是一个不工作的 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(而且他对正确性非常挑剔)。
【问题讨论】:
-
这可能是 json 本身的问题,我注意到自 1.4 以来 JQ 对 JSON 结构更加严格。我从 07 年开始的第一个 JSON 项目在我升级 JQ 时开始失败,我打开 JSON 输出并且对我的结构如此糟糕感到震惊。您可以发布 JSON 吗?
-
@picus:不,我针对多个验证器验证了我的 JSON,没关系。如果我实现 JSONP 回调,它会再次开始工作,所以格式没有问题。
-
@picus:我添加了一个不工作和工作 JSON 的示例。
-
@kappa 尝试在
"esito":之后添加一个空格。 -
@lonesomeday :我很幸运地发现了发生了什么,请参阅my answer。
标签: json jquery jquery-1.5