我的 Ajax 跨域请求在 IE 9 中失败并显示“访问被拒绝”。我已经阅读了有关该主题的几篇文章,并且 AFAIK 它应该可以工作。
- IE9 和 jQuery 1.8.1
- 呼叫是
async
,jsonp
并且crossdomain
,cache
是false
。这些是我找到的先决条件。 - 适用于最新的 Firefox 和 Chrome。
jQuery.support.cors
是真的- 甚至设置了响应标头
Access-Control-Allow-Origin:*
:(SO) - 返回的 JSON 代码也是正确的,使用了检查器(另见 3。)
那么为什么Access denied会失败呢?任何想法?可能是因为我的代码是从“JavaScript”库中调用的,而不是<script></script>
页面上的标签吗?
我错过了什么?
// The code is part of an object's method (prototype)
// code resides in a library "Mylib.js"
$.ajax({
type: 'GET',
url: url,
cache: false,
async: true,
crossdomain: true, // typo, crossDomain, see my answer below
datatype: "jsonp", // dataType
success: function (data, status) {
if (status == "success" && !Object.isNullOrUndefined(data)) { ... }
},
error: function (xhr, textStatus, errorThrown) {
// access denied
}
});
-- 编辑 -- 基于 Robotsushi 的评论,一些进一步的研究 ---
XDomainRequest
确实,在jQuery源代码(1.8.1)中找不到- 如果我不设置 cors (
jQuery.support.cors = true
),我最终会出现“无传输”异常。 - 仍然想知道为什么其他人在 IE9 跨域请求中明显成功,例如这里:jQuery Cross-Domain Ajax JSONP Calls Failing Randomly For Unknown Reasons In Some IE Versions
jQuery 处理这个问题的方式似乎是围绕下面的代码,但在我的特定情况下没有调用它,不知道为什么?
// 绑定脚本标签 hack transport jQuery.ajaxTransport( "script", function(s) {
// This transport only deals with cross domain requests if ( s.crossDomain ) {
2010 年的类似情况:Jquery $.ajax 在 IE 中的跨域调用失败然而,这应该已经被后来的 jQuery 版本解决了。