我一直在調查jQuery中的新(ish)延期對象,我偶然發現這個網站的文章here。jQuery的推遲和getScript的承諾
在這篇文章中,有些代碼是設計用來緩存腳本的,所以它們不會被請求多次。
var cachedScriptPromises = {};
$.cachedGetScript = function(url, callback) {
if (!cachedScriptPromises[ url ]) {
cachedScriptPromises[ url ] = $.Deferred(function(defer) {
$.getScript(url).then(defer.resolve, defer.reject);
}).promise();
}
return cachedScriptPromises[ url ].done(callback);
};
// You would then call it like thus.
$.cachedGetScript(url).then(successCallback, errorCallback);
這看起來像什麼對我是一種方式,以確保自己的$.getScript()
成功,你的腳本只能得到執行。
據我的實驗,儘管錯誤回調不會被調用,即使我提供了一個不正確的url。
我錯過了一些顯而易見的東西,或者代碼示例錯了嗎?
注意:我會在網站上提出這個問題,但評論系統不起作用。 :-S
這是一個該死的恥辱。感謝您的洞察力。 – 2011-06-11 12:31:23
這可能取決於'.getScript'是否支持[CORS](http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing)和注入腳本標記。即使是後者也許能夠支持延期,但是現在是否我不知道。 – hippietrail 2012-01-23 17:00:38
@lonesomeday,你確定對於本地請求,它會通過ajax運行嗎?如果是這樣,爲什麼當爲本地腳本調用$ .ajax時,它只返回數據但不執行它? – adardesign 2012-02-08 15:49:05