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