2009-06-03 19 views
2

最近從Prototype切換到jQuery,我正在努力解決一些基本問題。如何在jQuery中執行本地全局ajax事件?

我在我的應用程序中使用了幾個AJAX請求;對於這些請求中的95%,我想要執行一些全局事件,例如顯示或隱藏加載指示符。除全局功能外,每個請求在完成後還應執行一些自定義代碼。

好像當地的Ajax events覆蓋全球的一旦設置好了。例如,請看下面的代碼:

// global events 
$('#loader').bind('ajaxStart', function() { 
    // in this particular example, the ajaxStart() works fine, 
    // as it has not been overridden 
    Loader.enable(); 
}).bind('ajaxComplete', function() { 
    // this section will not execute. when the local complete() 
    // is removed, it will execute just fine 
    Loader.disable(); 
}); 

// local ajax event 
$.ajax({ 
    type: $(element).attr('method'), 
    url: $(element).attr('action'), 
    data: $(element).serialize(), 
    global: 'true', 
    complete: function(data) { 
     if (params.target && $('#' + params.target)) { 
      $('#' + params.target).html(data.responseText); 
     } 
     Behaviour.apply(); 
}); 

在這種特定情況下,本地完成()事件似乎停止執行全球ajaxComplete()事件。

是否有任何方式執行本地作爲全球ajax事件?

回答

0

首先,感謝你答覆。他們兩人至少幫助我一次又一次地重新評估我的代碼。

的問題和解決方案被證明是相當簡單:

這是所謂的在我的本地完成事件的Behaviour.apply();其他地方引發了錯誤,防止complete()功能完成正確和有效地禁止了全球ajaxComplete()事件。解決這個錯誤也解決了我的問題。

這意味着,jQuery的支持都結合本地全球AJAX事件。

3

我還沒有嘗試過,但你爲什麼不建立一個全球性的方法:

function globalAjaxComplete(data) 

,並從全球和本地事件處理程序調用它呢?

你也可以定義一個類「ajaxEnabled」,並做到這一點:

$(".ajaxEnabled").bind("ajaxStart", 
    Function() { globalAjaxComplete(); }); 

那麼你就不需要每次調用全局法。

不過不知道爲什麼本地綁定取消了全局的綁定。

+1

我還沒有嘗試過,但它會毫無疑問的工作。這需要我爲每個AJAX請求使用這個結構,但這並不能真正改善我的代碼。 – 2009-06-03 12:08:46

4

試圖運行您的代碼。添加了缺少的});雖然。像魅力一樣工作。他們呼籲在這個順序進行:

  1. ajaxStart
  2. 完整
  3. ajaxComplete

這裏是我做過什麼:

// local ajax event 
$.ajax({ 
    ... 
    global: 'true', 
    complete: function(data) { 
     ... 
    } 
}); // <=== This line here 
+0

現在錯誤已修復,但是由錯誤的粘貼引起。這並不能解決我的問題。 – 2009-06-03 14:24:19

相關問題