[jQuery] Global Ajax Event Handlers

先前產品自行封裝 Ajax 並實作 Ajax 送出後block UI,當然封裝有他一定的好處,但是萬一今天我不想用封裝的元件時,我又想要block UI時,寫法就會很麻煩。
可能變成會這樣寫:

       $.blockUI(LoadingOptions); 
       $.ajax({
            url: url,
            data: data,
            type: "POST",
            success: function (r) {
             //Do Something...            
             $.unblockUI();
            },
            error: function () {
                $.unblockUI();
            }
        });

今天分享Global Ajax Event Handlers,寫起來更簡單且直覺,程式碼如下:

    //Ajax 開始後,要做的事情
    $(document).ajaxStart(function () {
        $.blockUI(LoadingOptions);
    });
    //Ajax 結束後,要做的事情
    $(document).ajaxStop(function () {
        $.unblockUI();
    });
    //Ajax 發生例外時,要做的事情
    $(document).ajaxError(function () {
        $.unblockUI();
    });

這些用法就可以把一些共用邏輯寫在這些事件裡面,進一步達到「關注點分離」的目標,即我只需要專注在該次 Ajax 動作的邏輯,而不需要去想 block UI的事情了。

最後 Global Ajax Event Handlers 總共有六個 「ajaxStart」、「ajaxSend」、「ajaxSuccess」、「ajaxError」、「ajaxComplete」與「ajaxStop」;

lifecycle 為 ajaxStart > ajaxSend > ajaxSuccess / ajaxError > ajaxComplete > ajaxStop ,可以根據其特性做不一樣的應用。

參考:

Category: Global Ajax Event Handlers