2010-03-19 92 views
0

當我使用AJAX時,我通常會在每次請求之前做一些事情,讓用戶知道他們會等待一秒鐘。這通常通過添加動畫加載gif來完成。當我這樣做的時候,Firefox做了你所期望的並且在把控制移到下一行(AJAX被調用的位置)之前添加了gif。在Chrome中,它鎖定了瀏覽器,並且根本不做任何DOM更改(更不用說加載圖像),甚至包括更改某種東西的顏色,直到AJAX完成。雖然這不僅僅是AJAX。它是任何可以控制的東西,它不會改變DOM,直到控件返回窗口。谷歌瀏覽器,AJAX之前調整風格的IE問題

例(使用jQuery):

function submit_order() 
{ 
    $('#my_element').css('color', '#FF0000'); // Make text red before calling AJAX 
    $.getJSON('/api/', my_callback) 
    // Note, in IE and Chrome #my_element isn't turned red until the AJAX finishes and my_callback is run 
} 

爲什麼會發生這種情況,我怎麼能解決呢?由於數據的性質,我不能使用ASYNC(這將是一個大混亂)。我在設置樣式後嘗試使用window.setTimeout(myajaxfunc, 150),看看它是否會設置樣式,然後執行超時,但它看起來不僅僅是AJAX的問題,而是通常對腳本的控制(我認爲,因此標題提到AJAX,因爲這是我唯一遇到這個問題的時候)。

這和它在一個函數裏沒有任何關係。

回答

1

查看jQuery的ajaxStart,ajaxSend,ajaxStopajaxError方法,這些方法可讓您將事件附加到Ajax進程的各個部分。

+0

@Tom這次沒有幫助我,因爲我沒有完全誠實。我正在使用jQuery,但是我正在使用AJAX的外部API。然而,在實施過程中它是相似的,這就是爲什麼我以這樣的方式問了問題。但是,我選擇了你的答案,因爲這是我不知道的很好的信息。從現在開始,當我純粹用jQuery工作時,我肯定會使用這些工具(而不是手動執行前後的工作。 – orokusaki 2010-03-20 05:42:08