2011-03-11 28 views
2

我嘗試使用下面做一個跨域GET:爲什麼dojo.io.script.get()在接收404時執行提供的錯誤函數?

dojo.io.script.get({ 
    url: myUrl, 
    callbackParamName: "callback", 
    preventCache: true, 
    load: dojo.hitch(this, loadFunction), 
    error: dojo.hitch(this, function() { 
    console.log('Error!!!'); 
    }) 
}); 

負載功能運行正常,然而,當服務器返回404,誤差函數不運行。誰能告訴我爲什麼?

編輯

經過一番研究,我發現,超時和處理程序可以通過以下方式實現:

dojo.io.script.get({ 
    url: myUrl, 
    callbackParamName: "callback", 
    timeout: 2000 
}).then(function(data){ 
    console.log(data); 
}, function(error){ 
    alert(error); 
}); 

這將使用由dojo.Deferred對象提供的功能。

回答

2

當使用腳本標記(dojo.io.script.get所做的)訪問服務器時,狀態碼和標題不可用。

您可以嘗試一些其他方式來檢測問題,例如使用超時和分析腳本的內容。後者對於JSONP調用是有問題的(就像你的例子)。

+0

謝謝,尤金。我對dojo沒有太多的經驗,而且我從來沒有用jQuery的jsonp插件來解決這個問題,所以這讓我大吃一驚。我猜這個插件必須像你建議的一樣檢查 - 我將不得不採取仔細查看該代碼。 – 2011-03-14 11:54:45

0

我意識到這是舊的,但我認爲我會分享一個解決方案,以防其他人像我一樣,遇到此線程。

dojo.io.script基本上是在您的html頁面上添加一個<script/>。如果腳本無法加載onerror事件被稱爲

var script = document.createElement('script'); 
    script.setAttribute('type', 'text/javascript'); 
    script.setAttribute('src', myUrl); 
    script.onerror = function() { 
     debugger 
    } 
    script.onload = function() { 
     debugger 
    } 
    document.getElementsByTagName('body')[0].appendChild(script); 

這樣:所以,你可以試試這個。

*這可能不適用於所有情況,但是一個良好的開端

相關問題