jQuery的getScript函數似乎不支持錯誤回調函數。我不能在這裏使用全局ajax錯誤處理代碼,本地錯誤函數將是理想的。處理jQuery.getScript中的錯誤
回調獲取data/textStatus的文檔看起來不正確 - 回調既沒有。
關於如何檢測getScript調用失敗(例如服務器不可用)的任何建議?
編輯:只看了看源代碼,似乎回調只是在成功時調用,數據總是設置爲null,textStatus沒有定義(因爲這是一個成功回調,我猜)。該功能的文檔非常不正確。
jQuery的getScript函數似乎不支持錯誤回調函數。我不能在這裏使用全局ajax錯誤處理代碼,本地錯誤函數將是理想的。處理jQuery.getScript中的錯誤
回調獲取data/textStatus的文檔看起來不正確 - 回調既沒有。
關於如何檢測getScript調用失敗(例如服務器不可用)的任何建議?
編輯:只看了看源代碼,似乎回調只是在成功時調用,數據總是設置爲null,textStatus沒有定義(因爲這是一個成功回調,我猜)。該功能的文檔非常不正確。
這是一個黑客攻擊的一位,但..
你可以聲明腳本里面的變量加載並檢查它已加載腳本(假定完整功能仍然火災)後:
script_test.js:
var script_test = true;
然後:
$.getScript("script_test.js", function()
{
if (typeof script_test !== undefined) alert("script has been loaded!");
});
或者你可以試着看看你的腳本中是否存在 - 實際上存在 - 函數,變量,對象等
更通用的方法是在腳本中添加一個自我執行的函數要加載,使他們在你的 「主」 腳本執行功能:
main_script.js:
function scriptLoaded(scriptName)
{
alert(scriptName + " loaded!");
}
$.getScript("script_test.js");
script_test.js:
(function()
{
scriptLoaded("script_test.js");
})();
全局JQuery Ajax-ErrorHandler將會工作!
在$ .getScript-Call之前設置錯誤處理程序來緩存錯誤。
$(document).ajaxError(function(e, xhr, settings, exception) {
alert('error in: ' + settings.url + ' \n'+'error:\n' + exception);
});
正如JQuery手冊中所述:http://api.jquery.com/ajaxError/。
從jQuery 1.5開始,您可以在調用getScript時附加一個.fail。
$.getScript('foo.js', function(){
//script loaded and parsed
}).fail(function(){
if(arguments[0].readyState==0){
//script failed to load
}else{
//script loaded but failed to parse
alert(arguments[2].toString());
}
})
如果腳本是一個跨域URL('always'回調函數或全局''ajaxError'處理函數也沒有'fail'回調函數。 – 2012-07-03 20:30:56
'fail'回調函數與跨域URL一起使用在jQuery 2.0+ – tee 2014-05-14 22:20:18
對於跨域腳本標記,成功事件觸發,但錯誤事件沒有;不管你使用什麼語法。你可以試試這個方法:
handle = window.setTimeout
window.clearTimeout(handle)
示例代碼超時:
var timeoutId; // timeout id is a global variable
timeoutId = window.setTimeout(function() {
alert("Error");
}, 5000);
$.getScript("http://other-domain.com/script.js", function(){
window.clearTimeout(timeoutId);
});
起初,這似乎是一個相當醜陋的解決方案,但它是唯一一個實際與adblockers一起工作的。所以非常感謝! – devsnd 2014-08-13 15:21:03
我很想知道這個問題是否在新版本的jQuery中得到解決。我注意到這一點,我正在使用jQuery 1.8.3。但是,我注意到這兩個回調都沒有被調用。我使用的jsonp服務在這種情況下返回一個400頭文件,我無法找到它來處理它我使用jQuery的客戶端 – 2014-12-03 22:05:11
@Anthony:Jquery 2.x現在支持錯誤處理程序(1.x仍然沒有) – 2014-12-10 18:21:43
jquery.ajax有一個替代方式來處理錯誤
jQuery.ajax({
type: "GET",
url: 'http://www.example.com/script_test.js',
dataType: "script",
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log('error ', errorThrown);
},
success:function(){
console.log('success');
}
});
是的,這就是我目前正在做的事情,但正如你所說,這有點破解。順便說一句,代碼應該是
if (typeof script_test !== "undefined") ...
– psychotik 2009-09-10 17:56:13是的,這是一個黑客。你有沒有考慮我的第二個例子?而且..我不相信你需要typeof操作符。 – roosteronacid 2009-09-10 18:13:50
感謝您的第二個建議。另外,除非我真的瘋了,如果var沒有被定義在任何地方,你將需要typeof。嘗試在腳本中運行下面的這個函數(在之前沒有提及foo)。你會注意到在JS控制檯中的錯誤:function test(){if(foo === undefined)alert(「Yay!」); } – psychotik 2009-09-10 18:21:48