jQuery Deferred和Ajax是相互關(guān)聯(lián)的,jQuery Deferred對象的主要目的是為了幫助管理多個異步的請求和回調(diào)函數(shù),而它也是jQuery的Ajax函數(shù)內(nèi)部使用的關(guān)鍵對象。
使用Deferred來管理多個異步請求的代碼如下:
// 創(chuàng)建第一個異步請求 var request1 = $.ajax({ url: "example.php", dataType: "json" }); // 創(chuàng)建第二個異步請求 var request2 = $.ajax({ url: "example.php", dataType: "json" }); // 創(chuàng)建第三個異步請求 var request3 = $.ajax({ url: "example.php", dataType: "json" }); // 把所有請求代碼當做一個$.when函數(shù)的參數(shù) // $.when會等到所有請求都完全resolved或者rejected才會執(zhí)行.done()或者.fail()函數(shù) $.when(request1, request2, request3).done(function(data1, data2, data3) { // 所有請求都成功完成并且返回數(shù)據(jù),可以處理這些數(shù)據(jù) console.log(data1[0], data2[0], data3[0]); }).fail(function(xhr) { // 至少有一個請求失敗并且返回error status,處理錯誤信息 console.log(xhr.responseText); }).always(function() { // 無論如何都會執(zhí)行這個函數(shù),可以用來顯示和隱藏"正在加載"的動畫等等 console.log('Request completed!'); });
從上面這個代碼例子中,我們可以看出整個異步請求過程是非常簡潔而且高效的。一旦所有的異步請求都準備好了之后,我們才會在Deferred對象上執(zhí)行.done()或者.fail()函數(shù)來處理請求的返回值或者錯誤信息。
總之,jQuery Deferred和Ajax的結(jié)合使用,可以讓我們更加方便的管理多個異步請求和回調(diào)函數(shù)。通過使用$.when函數(shù),我們可以等到所有的請求都完全resolved或者rejected才去處理返回的數(shù)據(jù)或者錯誤信息,代碼變得更加高效和簡潔。