我想执行以下AJAX调用(跨域):
$.ajax({
type: 'GET',
url: url + "?callback=?",
contentType: 'application/json',
async: false,
jsonp: "callback",
dataType: 'jsonp',
success: function (json) {
alert("ok" + JSON.stringify(json));
},
error: function (json) {
alert("err" + JSON.stringify(json));
}
});
我收到此警告信息:
ERR { “readyState的”:4 “状态”:200, “状态文本”: “成功”}
这意味着代码以错误方法结束。
如果我在Firefox或Chrome中检查请求,则响应的JSON部分可用且格式清晰。 是否可以在错误方法中获取JSON响应?或者您是否知道为什么没有成功方法?
不幸的是,这不是我的服务器,所以我无法在服务器端实现任何更改。我使用http://jsonlint.com/来验证JSON输出,它是有效的。在浏览器中输入相同的URL会正确返回JSON内容。
非常感谢, 我尝试了一些不同的方法,但仍然没有使用错误方法,
[编辑]
所以,我正在玩不同的方法,总是得到同样的错误。如果我将调用的错误部分更改为:
error: function (jqXHR, textStatus, ex) {
console.log(arguments);
alert(textStatus + "," + ex + "," + jqXHR.responseText);
}
然后我收到以下错误:
http://i.stack.imgur.com/ck6Sd.png
复制搜索引擎的错误粘贴:
0:对象 1:“parsererror” 2:错误 消息:“jQuery11020553141210693866_1392367304225未被调用” 堆栈:(...) get stack:function(){[native code]} set stack:function(){[native code]} proto :d callee:function(jqXHR,textStatus,ex){ 长度:3 proto :对象
同样适用于上述情况,浏览器中的响应可以在没有问题的情况下读取。
EDIT2
我最后以旧方式进行JSON调用,将其嵌入到页面中:
script = document.createElement("script");
script.type = "text/javascript";
script.id = "resultJSON";
script.src = url;
$(".resultsOutput").append(script);
但我检索数据时遇到麻烦,脚本标签似乎是空的。我在JSON上收到错误:
Uncaught SyntaxError:意外的令牌:
任何人都可以提供帮助吗?我开始对这个绝望了。似乎问题是没有方法包装器返回JASON。
[最后编辑]
因此,事实证明服务器不支持CORS并且返回的JSON没有包含在JS函数中,因此这种方法不起作用。我将不得不使用其他方法来检索数据..感谢大家阅读
安迪
答案 0 :(得分:1)
有什么特别的理由:
第二个可能导致错误。如果我是正确的,服务器将返回application / javascript mime-type,因为它应该返回您要查找的JSON包装到一个回调函数中,该函数将在请求完成后调用。像这样:
function callback() {
return {"a","b"} //the JSON you are looking for
}
这一切都是通过创建标记“脚本”来内部处理的,以避免跨域浏览器限制,因此您无法直接处理JSON,需要将其包装到Javascript代码中。因此,contentType可能是错误的。
尝试删除ajax选项上的contenType属性,并查看jquery的行为(它应该解释来自服务器响应头的内容类型)。