2013-05-20 33 views
3

我會注意到這段代碼並不是我自己構建的,我只是在已經存在的系統上使用插件來做一些UI更改。

我正在構建一個插件,它利用了blockUI(是的,我需要使用插件構建一個插件),以便在觸發Ajax調用時在某些元素上顯示加載圖標,但是這個特別調用alert()如果success()事件沒有得到所需的響應。

這樣做的結果是我的加載圖標調用​​alert火災,這是不是我想要做的事。

當我打電話我建立的功能,我通過在$.post()完成我需要的設置和選項,比如:

$.fn.startLoading({    
    element: $("div"), 
    ajax: $.post('some.url', 
    { 
     //Ajax settings... 
    }, function (response) { //This is the success function, right? 
      if (good) { 
       //stuff 
      } 
      else 
       alert("Bad!"); //This happens BEFORE fadeOut() 
     } 
    }, 'text') 
    .error(function (msg) { 
     alert('Worse error!'); 
    }) 
}); 

我的插件的功能通吃的這種作爲一個options參數,像這樣:

$.fn.startLoading = function (options) { ...

我再訪問$.post()電話這樣的:

if (options.ajax) 
    ajax = options.ajax; 

這是我卡住的地方。我需要確保​​發生在success事件觸發之前。我如何使用我在插件中創建的ajax變量來做到這一點?

+0

語法錯誤在這裏:'ajax:$ .post('some.url'),{'should should remove')' –

+0

剛纔看到了,謝謝。現在更新。 – Kehlan

+0

此外,'jqXHR.error'折舊,您應該使用.fail。 –

回答

1

一個簡單的方法是ajaxComplete,等的ajaxSuccess http://api.jquery.com/category/ajax/

這些都是全球性的AJAX處理程序抓取通過jQuery發送的所有Ajax請求......所以,你可以在那裏設立一個處理程序,並列入白名單,你自己的回調元素等等等等你忽視那些不關心你的事情。

在我的測試中,這些全局處理程序在特定ajax調用的處理程序之前觸發。

相關問題