Dojo跨域代码未触发ready()函数

Dojo跨域代码未触发ready()函数,dojo,Dojo,我正在尝试加载跨域dojo组件,尽管将javascript文件加载到浏览器中的GET请求的状态为200,但ready()函数在require语句之后永远不会启动。还要注意,在这个示例中,Comp1组件是用传统的dojo.provide()、dojo.require()等语法编写的,因此我将异步设置设置为LegacySyc 任何关于事情的建议,我都可以尝试获取更多关于正在发生的事情的信息。js文件本身的GET请求上没有CORS头,但我认为代码执行(??)不需要CORS头,因为我在Firebug中没

我正在尝试加载跨域dojo组件,尽管将javascript文件加载到浏览器中的GET请求的状态为200,但ready()函数在require语句之后永远不会启动。还要注意,在这个示例中,Comp1组件是用传统的dojo.provide()、dojo.require()等语法编写的,因此我将异步设置设置为LegacySyc

任何关于事情的建议,我都可以尝试获取更多关于正在发生的事情的信息。js文件本身的GET请求上没有CORS头,但我认为代码执行(??)不需要CORS头,因为我在Firebug中没有收到任何CORS错误

代码/配置如下

谢谢

        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(“==脚本块结束==”);

dojo
require
使用引擎盖下的ajax来要求您的模块。 每当JavaScript中涉及ajax时,都会应用同源策略

是浏览器的一种安全机制,可防止获取数据或将数据发送到其他域。在您的情况下,
ready
功能不会被调用,因为浏览器阻止了模块的请求

解决此问题最干净、更方便的方法是在AMD模块所在的服务器上启用CORS


启用CORS非常简单

在加载状态为200的文件中是否有ready.js和dojo.js?我的组织遇到了@user1930364的问题,您的解决方案作为服务器没有帮助(它支持CORS,从不从浏览器中接收原点:标头。@ RUCKC请考虑添加一个新问题,以便包括您的代码的示例,这样我们就可以查看它。这可能是JS的问题。