Dojo跨域代码未触发ready()函数
我正在尝试加载跨域dojo组件,尽管将javascript文件加载到浏览器中的GET请求的状态为200,但ready()函数在require语句之后永远不会启动。还要注意,在这个示例中,Comp1组件是用传统的dojo.provide()、dojo.require()等语法编写的,因此我将异步设置设置为LegacySyc 任何关于事情的建议,我都可以尝试获取更多关于正在发生的事情的信息。js文件本身的GET请求上没有CORS头,但我认为代码执行(??)不需要CORS头,因为我在Firebug中没有收到任何CORS错误 代码/配置如下 谢谢Dojo跨域代码未触发ready()函数,dojo,Dojo,我正在尝试加载跨域dojo组件,尽管将javascript文件加载到浏览器中的GET请求的状态为200,但ready()函数在require语句之后永远不会启动。还要注意,在这个示例中,Comp1组件是用传统的dojo.provide()、dojo.require()等语法编写的,因此我将异步设置设置为LegacySyc 任何关于事情的建议,我都可以尝试获取更多关于正在发生的事情的信息。js文件本身的GET请求上没有CORS头,但我认为代码执行(??)不需要CORS头,因为我在Firebug中没
dojoConfig = {
async: "legacyAsync",
baseUrl: "https://my.remote.domain/path/to/dojo/",
has: {
"dojo-debug-messages": true
},
tlmSiblingOfDojo: true,
packages: [{
name: "myremotestuff",
location: "../../myremotestuff"
}],
trace:{
"loader-inject":1,
"loader-define":1,
"loader-exec-module":1,
"loader-run-factory":1,
"loader-finish-exec":1,
"loader-define-module":1,
"loader-circular-dependency":1
},
isDebug: true,
cacheBust: true
};
...
<script type="text/javascript">
console.info("=== SCRIPT BLOCK BEGIN ===");
require.on('error', function (error) {
console.info("%%%% require error function fired. error: [ " + error + " ] %%%%");
});
require([
"dojo/ready",
"myremotestuff/Comp1"
], function (ready,comp1) {
ready(function(){
console.info("ready() - *Begin* - (I never see these messages, and this line doesn't get hit in debug mode either)");
console.info("ready() - comp1 defined? " + ( (comp1 !== undefined) && (comp1 !== null) ) );
console.info("ready() - *End*");
});
});
console.info("=== SCRIPT BLOCK END ===");
</script>
dojoConfig={
异步:“legacySync”,
基本URL:“https://my.remote.domain/path/to/dojo/",
有:{
“dojo调试消息”:true
},
是的,
套餐:[{
名称:“myremotestuff”,
位置:“../myremotestuff”
}],
跟踪:{
“加载器注入”:1,
“加载器定义”:1,
“加载器执行模块”:1,
“装载机运行工厂”:1,
“装载机完成执行”:1,
“加载器定义模块”:1,
“加载器循环依赖项”:1
},
是的,
真的吗
};
...
console.info(“==脚本块开始==”);
require.on('error',函数(error){
console.info(“%%%要求启动错误函数。错误:[“+错误+”]%%”);
});
要求([
“dojo/ready”,
“myremotestuff/Comp1”
],功能(就绪,组件1){
就绪(函数(){
info(“ready()-*Begin*-(我从来没有看到这些消息,在调试模式下这一行也不会被命中)”;
info(“ready()-comp1-defined?”+((comp1!==未定义)和&(comp1!==null));
console.info(“ready()-*End*”;
});
});
console.info(“==脚本块结束==”);
dojorequire
使用引擎盖下的ajax来要求您的模块。
每当JavaScript中涉及ajax时,都会应用同源策略
是浏览器的一种安全机制,可防止获取数据或将数据发送到其他域。在您的情况下,ready
功能不会被调用,因为浏览器阻止了模块的请求
解决此问题最干净、更方便的方法是在AMD模块所在的服务器上启用CORS
启用CORS非常简单在加载状态为200的文件中是否有ready.js和dojo.js?我的组织遇到了@user1930364的问题,您的解决方案作为服务器没有帮助(它支持CORS,从不从浏览器中接收原点:标头。@ RUCKC请考虑添加一个新问题,以便包括您的代码的示例,这样我们就可以查看它。这可能是JS的问题。