jQuery:Více požadavků AJAX a JSON, jedno zpětné volání

Pracoval jsem na nové funkci pro Mozilla Developer Network, která vyžaduje načtení základního souboru skriptu a také streamu JSON. Protože používáme jQuery, znamená to jQuery.getScript a jQuery.getJSON . Vím, že oba fungují asynchronně a vracejí Deferred, takže mě napadlo, jestli existuje způsob, jak je načíst paralelně s jedním zpětným voláním, podobně jako to dělají zavaděče JavaScriptu, jako je curljs. Měl jsem štěstí! Pomocí jQuery.when , mohu načíst oba požadavky současně s jedním zpětným voláním!

JavaScript jQuery

Jak jsem zmínil, mým případem použití bylo načítání skriptu a zdroje JSON, takže jak to funguje:

$.when(
	$.getScript('/media/js/wiki-min.js?build=21eb633'), 
	$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/')
).then(function(a, b) {  // or ".done"
	
	// Yay, stuff loaded and now we can do something!

});

Po dokončení načítání zdrojů se zobrazí done nebo then spustí se zpětné volání a já vím, že požadavky jsou kompletní. Každý typ požadavku poskytuje jiný objekt argumentu zpětného volání, takže výše uvedené by poskytlo:

// [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]

Pokud bychom chtěli do mixu přidat tradiční požadavek AJAX XHR, řekněme šablonu widgetu, mohli bychom to udělat také:

$.when(
	$.getScript('/media/js/wiki-min.js?build=21eb633'), 
	$.getJSON('https://developer.mozilla.org/en-US/demos/feeds/json/featured/'), 
	$.get('/')
).then(function(a, b, c) { 
	console.log(a, b, c); 
});

Dojo Toolkit má tento typ funkcí již dlouhou dobu, ale jsem nadšený, že moderní jQuery umožňuje totéž. Vytváření více požadavků pomocí jednoho zpětného volání se v dnešní době zdá být stejně relevantní jako jakýkoli jiný úkol, takže jQuery jde rozhodně s dobou!