2011-05-06 83 views
0
$('#wait').ajaxStart(function(){ 
$(this).css('background-position','0 -90px'); 
}); 
var result = $.ajax({ 
url: "file.php", 
async: false, 
data: ({id:id}), 
type: "post", 
cache: false 
}).responseText; 

#wait div有一個ok,錯誤和等待圖標的背景,我想改變ajax調用星的div的背景位置,但它不工作。我試圖提醒從ajaxStart funcion的東西,它的工作,所以我不從什麼理由阿賈克斯不會等待後臺位置的變化知道....如何在ajax調用開始之前顯示加載消息?

+0

您是否嘗試過使用異步調用?無論如何,你應該避免同步通話。 – 2011-05-06 12:42:37

+0

我認爲沒有異步我不能從服務器取回結果 – Csabi 2011-05-06 12:48:02

+0

當然你可以....否則它會是什麼意思?你必須設置一個'success'回調,這個回調被調用時將響應作爲參數傳遞。看看jQuery文檔,有一些例子。 – 2011-05-06 12:50:45

回答

1

因爲你的Ajax請求是同步的,和JavaScript是單線程的,它會阻止其他活動。我不確定爲什麼你的特定情況不起作用,因爲我期望css方法能夠立即完成,但我期望它與瀏覽器實際呈現更新DOM的細節有關,直到線程完成。

但是,一般來說,您可以完全通過使用異步請求來避免此問題。阻止Ajax請求也會產生負面的用戶體驗,因爲UI在發生時已被完全禁用。因此,使用異步請求幾乎總是可取的。如果你需要確保頁面元素被禁用(例如,有效地模擬同步請求),有很多jquery插件可以輕鬆完成此操作。我有好運​​:http://jquery.malsup.com/block/

+0

我的問題是,如果我設置異步爲真比responseText爲空 – Csabi 2011-05-06 13:06:39

+0

它不以同樣的方式工作。查看關於原始問題的最新評論。您需要將回調附加到'success'選項。這並不困難,只是不同而已,因爲它是異步的。文檔http://api.jquery.com/jQuery.ajax/在頁面中途有一個簡單的例子。 – 2011-05-06 13:09:09

+0

謝謝,這工作! – Csabi 2011-05-06 13:27:05

0

beforeSend(jqXHR, settings)Function

預請求回調函數,可以在發送之前修改jqXHR(在jQuery 1.4.x,XMLHTTPRequest)對象中。使用此設置自定義標題等。jqXHR和設置映射作爲參數傳遞。這是一個Ajax事件。在beforeSend函數中返回false將取消請求。從jQuery 1.5開始,beforeSend選項將被調用,而不管請求的類型如何。

0

您是否嘗試過beforeSend(jqXHR, settings)函數用於等待背景,error(jqXHR, textStatus, errorThrown)錯誤以及success(data, textStatus, jqXHR)函數是否成功?

http://api.jquery.com/jQuery.ajax/

0

我有同樣的問題,jQuery手機試圖顯示$ .mobile.loading之前,我發送數據,在我的情況下,它必須同步。一些數據必須在別人之前上傳,所以如果它是全部異步的,它可能會在插入前發送一些更新記錄。我的解決方案是圍繞ajax調用setTimeout,以便在加載Ajax之前顯示加載時間。糟糕的做法,但直到他們給我回電話$ .mobile.loading我堅持使用它。

相關問題