jQuery的ajax鏈式編程方法

在開發的過程,常常會遇到一些耗時間的操做,好比ajax讀取服務器數據(異步操做),遍歷一個很大的數組(同步操做)。無論是異步操做,仍是同步操做,總之就是不能當即獲得結果,JS是單線程語音,不能當即獲得結果,便會一直等待(阻塞)。html

通常的作法就是用回調函數(callback),即事先定義好一個函數,JS引擎不等待這些耗時的操做,而是繼續執行下面的代碼,等這些耗時操做結束後,回來執行事先定義好的那個函數。以下面的ajax代碼:ajax

$.ajax({
    url: "test.html",
    success: function(){
        console.log("success");
    },
    error: function(){
        console.log("error");
    }
});

但這樣寫不夠強大靈活,也很囉嗦。爲此,jQuery1.5版本引入Deferred功能,爲處理事件回調提供了更增強大而靈活的編程模式。編程

$.ajax("test.html")
.done(
    function(){
        console.log("success");
    }
)
.fail(
    function(){
        console.log("error");
    }
);

不就是鏈式調用嘛,有何優勢?數組

優勢一:能夠清晰指定多個回調函數服務器

function fnA(){...}
function fnB(){...}
$.ajax("test.html").done(fnA).done(fnB);

試想一下,若是用之前的編程模式,只能這麼寫:異步

function fnA(){...}
function fnB(){...}
$.ajax({
    url: "test.html",
    success: function(){
        fnA();
        fnB();
    }
});

優勢二:爲多個操做指定回調函數函數

$.when($.ajax("test1.html"), $.ajax("test2.html"))
.done(function(){console.log("success");})
.fail(function(){console.log("error");});

用傳統的編程模式,只能重複寫success,error等回調了。url

相關文章
相關標籤/搜索