2017-03-02 32 views
0

我想加載跨域dojo組件,儘管GET請求將JavaScript文件加載到瀏覽器中的狀態爲200,但ready()函數從未觸發要求聲明。還要注意,在這個例子中,Comp1組件是用傳統的dojo.provide(),dojo.require()等語法編寫的,所以我將async設置設置爲legacyAsyc。Dojo跨域代碼不觸發就緒()函數

任何關於事情的建議,我可以嘗試獲取有關正在發生的事情的更多信息將會很棒。在js文件本身的GET請求上沒有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> 
+0

是否ready.js和的dojo.js文件當中載有200的地位很容易? – barbsan

回答

0

dojo require在引擎蓋下使用ajax來要求你的模塊。 只要JavaScript中涉及到ajax相同來源策略適用。

Same-origin policy是瀏覽器的一種安全機制,用於防止數據獲取或發送到不同的域。在你的情況下,ready函數沒有被調用,因爲模塊的請求被瀏覽器阻止。

解決此問題的最簡單最方便的方法是隻在您的AMD模塊所在的服務器上啓用CORS。

啓用CORS是here a good tutorial website.

+0

我的組織正在運行@ user1930364的問題,並且您的解決方案無法幫助,因爲服務器(它支持CORS,從不會收到來自瀏覽器的Origin:頭文件) – ruckc

+0

@ruckc請考慮在SO上添加一個新問題,包括你的代碼,所以我們可以看看它,這可能是JS的問題。 – GibboK

相關問題