我在尝试使用dojotoolkit跨域时遇到了问题。
我在apache Access-Control-Allow-Origin
和Access-Control-Allow-Headers
中设置标头,这使得它可以在除IE8和IE9之外的所有浏览器中正常工作。我收到“访问被拒绝”的消息。
如
Line: 711
Character: 3
Code: 0
Error Message: Access is denied.
URL: http://remote.site.net/includes/dojotoolkit/dojo/_base/xhr.js
任何人都可以传播这个吗?
答案 0 :(得分:4)
Internet Explorer 8和9 does not support CORS via XMLHttpRequest
,但是通过专有XDomainRequest
。不幸的是,Dōjō没有考虑到这一点,并尝试通过XHR
加载跨域资源,该文件以 Access被拒绝错误结束。
幸运的是,Dōjō提供了强大的dojo/request/registry
,允许您修改此行为:
定义使用XDomainRequest
获取资源的 XDomainRequest提供程序:
function xdr(url, options) {
var def = new Deferred();
var xdr = new XDomainRequest();
if (xdr) {
xdr.onload = function(e) {
def.resolve(xdr.responseText);
}
xdr.open(options.method, url);
xdr.send();
return def;
}
def.reject(new Error('XDomainRequest not supported.'));
return def;
}
然后根据浏览器定义调用corsProvider
或XHR
的{{1}}:
XDR
注册function corsProvider(url, options) {
if(window.XDomainRequest) {
return xdr(url, options);
}
return xhr(url, options);
}
以处理跨域请求:
corsProvider
现在请求跨域资源也应该在IE中工作:
var url = "http://cors-test.appspot.com/test";
var handle = request.register(url, corsProvider);
查看实际操作:http://jsfiddle.net/phusick/LZZhs/
这适用于Dōjō1.8+,因为request.get(url).then(function(response) {
console.log(response);
});
。如果您dojo/request
需要dojo/_base/xhr
,则dojox.io.xhrPlugins
,但我没有经验。无论如何,为遗留的Dōjō版本实现前面提到的dojo/aspect
应该是非常简单的。
答案 1 :(得分:0)
另见其他涉及大部分内容的SO问题: