[英]jQuery cross domain request still failing in IE, but using jsonp
我的Ajax跨域请求在IE 9中失败,并且“拒绝访问”。 我已经阅读了几篇关于这个主题的帖子,AFAIK应该可以使用。
async
, jsonp
和crossdomain
, cache
是false
。 这些是我找到的先决条件。 jQuery.support.cors
是真的 Access-Control-Allow-Origin:*
( SO ) 那么为什么这会因拒绝访问而失败? 任何想法? 可能是因为我的代码是从“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
(1.8.1) jQuery.support.cors = true
),我最终会遇到“No Transport”异常。 jQuery处理这个的方式,似乎是围绕下面的代码,但在我的特定情况下不会调用,不知道为什么?
//绑定脚本标记hack transport jQuery.ajaxTransport(“script”,function(s){
// This transport only deals with cross domain requests if ( s.crossDomain ) {
2010年的类似情况: 在跨域调用的IE中Jquery $ .ajax失败但是,这应该已经被后来的jQuery版本解决了。
好的,现在工作。 我身边的几个错误:
crossDomain: true, dataType: "jsonp"
,错字 - 错过大写字母。 考虑到所有事情,它的确有效。 所以我的个人清单将是:
json
(例如使用Chrome,FF或IE10)。 确保设置了响应标头: Access-Control-Allow-Origin:*
jsonp
,请检查: async: true
, jsonp
和crossdomain: true
, cache
为false
, jQuery.support.cors
为true
这些是我找到的先决条件。 jsonp
响应是一个函数调用(函数中包含JSON ), 而不是 “普通的”JSON数据。 我有一个类似的问题试图访问我存储在Google云端存储上并使用jQuery的ajaxing访问的一些json。 这在Chrome和Firefox中运行良好,但在IE(9及以下版本)测试时,我收到了“拒绝访问”消息。
我解决它的方法是明确地使用jsonP:
(function (o) { variableName = [json]; }(window.[nameSpace] = window.[nameSpace]|| {}));
在html文件的标记内包含javascript文件的url,例如
<script type="application/javascript" src="[url to javascript file]"></script>
希望这可以帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.