我知道這些函數(shù)都是異步執(zhí)行(asyncronously)并且會(huì)延遲一段時(shí)間返回,所以我想知道是否有一種方式,使我可以使用單個(gè)回調(diào),并行地加載它們,就像JS加載器 curljs 所做的那樣。 很幸運(yùn)! 通過(guò)jQuery.when, 我可以并發(fā)地加載兩個(gè)請(qǐng)求,只執(zhí)行一次回調(diào)!
jQuery 腳本
正如我提到的,下面是加載腳本和一個(gè)JSON資源的用例:
復(fù)制代碼 代碼如下:
$.when(
$.getScript('/media/js/wiki-min.js?build=21eb633'),
$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/')
).then(function(a, b) { // 或者也可以使用 ".done"
// Yay, 加載完成,此處我們可以執(zhí)行一些依賴操作。。。
});
當(dāng)資源加載完成, 指定的 done 或者 then 回調(diào)會(huì)觸發(fā),因此可以知道請(qǐng)求已經(jīng)完成。 每個(gè)請(qǐng)求返回的回調(diào)參數(shù)對(duì)象類型不同,因此上述請(qǐng)求可能返回如下信息:
復(fù)制代碼 代碼如下:
// 格式: [response, state, jqxhr], [response, state, jqxhr]
["(function(c){var e=c(".from-search-navigate");if(e…;if(j){g.apply(m,l)}}}})(window,document,jQuery);", "success", Object]
[Array[15], "success", Object]
如果還需要增加一個(gè)傳統(tǒng)的AJAX XHR請(qǐng)求,比如說(shuō)一個(gè)小部件模板,我們可以這樣做:
復(fù)制代碼 代碼如下:
$.when(
$.getScript('/media/js/wiki-min.js?build=21eb633'),
$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/'),
$.get('http://www.survivalescaperooms.com/')
).then(function(a, b, c) {
console.log(a, b, c);
});
Dojo Toolkit很早就有此類功能了,但jQuery也可以這么做我還是相當(dāng)振奮的。 對(duì)于現(xiàn)在的開(kāi)發(fā),多個(gè)不同步且返回先后順序也不確定的請(qǐng)求共享同一個(gè)回調(diào)是很自然的需求,所以jQuery絕對(duì)是與時(shí)俱進(jìn)的!
新聞熱點(diǎn)
疑難解答
圖片精選