我正在使用 jQuery 的 .ajax 将其他页面的内容拉入模式窗口。这些页面中的大多数都位于同一域中,并且可以在所有浏览器上正常工作。
有一个链接指向另一个域。该链接在 Chrome、Firefox 和 Safari 中可以正常工作,但在 Internet Explorer 8 和 9 中会出现“拒绝访问”错误。
我搜索了很多解决方案,并尝试了一些到目前为止没有帮助的方法,包括:
- 我确认 Access-Control-Allow-Origin 已设置为允许我的域。我也尝试将其设置为“*”,只是为了确认这不是问题。
- 我尝试使用不同的 jQuery 方法来进行 AJAX 调用。我使用了 jQuery 的 load、get 和 ajax 方法。 jQuery 的 ajax 方法给了我访问被拒绝错误。
- 我尝试使用 Internet Explorer 的 XDomainRequests。 XDomainRequests 告诉我有一个错误,但没有给我更多信息。我尝试对此代码进行多次更改,我发现了一些建议,例如在发送函数上设置超时,但没有任何更改。
- 我设置了 jQuery.support.cors = true;并将 crossDomain: true 添加到我的 .ajax 调用中。
- 我发现有人建议 jQuery 版本 1.8.0 导致了这个问题,而我正在开发的网站上使用的版本恰好是这个版本。他们的建议是退回到 1.7.2 版本,该版本并未解决问题。我也尝试更改为版本 1.11.0,但这也没有什么区别。
- 我看到一个建议,添加 &callback=?到网址末尾可以解决这个问题,但这没有什么区别。
我可能忘记了今天尝试过的一些事情,但这应该是大部分。
这是我目前的代码:
jQuery.support.cors = true;
var request = $.ajax(
{
crossDomain: true,
type: "GET",
url: url,
success: function () {
console.log('success');
},
error: function (a, status, error) {
console.log('error: ' + error);
},
complete: function () {
console.log('complete');
}
});
Chrome、Firefox 和 Safari 在控制台中记录“成功”和“完成”。 IE8/9 日志“错误:错误:访问被拒绝。”并在控制台中“完成”。
最佳答案
前几天我遇到了类似的问题。这就是我尝试过的方法,效果非常好
我将属性 dataType 设置为 jsonp(即 dataType: 'jsonp'),这适用于 GET,但不适用于 POST
如果上述方法仍然不起作用,那么您可以引用 MoonScript 中的以下脚本,它会自动挂接支撑
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
关于javascript - jQuery .ajax 在 IE8/9 中跨域请求被拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519736/