2010-02-17 44 views
6

完整的處理程序我有負載不會觸發ajaxSetup上完全

// Ajax setup 
$.ajaxSetup({ 
beforeSend: function() { 
$('#general-ajax-load ').fadeIn(); 
}, 
complete: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
}); 

在頁面加載設置加載動畫爲我所有的Ajax調用。除了load()調用外,它工作得很完美。僅在發送之前觸發負載,並且完全不會被調用,其結果是顯示永不消失的動畫。

有什麼想法?

回答

4

http://bugs.jquery.com/ticket/4086#comment:4, 「正確」 的方法是:

$(document).ajaxSend(function(event, jqXHR, settings) { 
    $('#general-ajax-load ').fadeIn(); 
}); 

$(document).ajaxComplete(function(event, jqXHR, settings) { 
    $('#general-ajax-load ').fadeOut(); 
}); 

我只是做了一些測試,確實似乎在所有情況下都能正常工作(包括$.load)。

1

$.load手冊說:

...這是大致相當於 $獲得(網址,數據,成功)只是 它是一種方法,而不是全局函數,它有一個隱含 回調函數

這似乎是$.load的隱回調函數重載complete回調在$.ajaxSetup。該$.ajaxSetup文件說:

所有後續Ajax調用使用任何 功能將使用新的設置, 除非個別 調用所重寫,直到 $ .ajaxSetup的下一次調用()。

我猜的解決辦法是用$.get更換您的通話$.load(或更詳細的$.ajax)。您也可以嘗試使用success

2

添加成功解決了這一問題,謝謝(我可以發誓,我嘗試過)

$.ajaxSetup({ 
beforeSend: function() { 
$('#general-ajax-load ').fadeIn(); 
}, 
complete: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
success: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
}); 

:)

+0

如果AJAX調用導致錯誤(即HTTP 401),該怎麼辦?成功處理程序是否也被調用? – 2011-01-15 13:03:18

+0

我認爲沒有,但應該叫完整。 – umpirsky 2011-01-17 10:09:17