2012-04-02 52 views
3

當我使用jQuery的$ .post ajax函數,頁面凍結2-3秒,然後收到數據。凍結時間可能會隨收到的數據而變化。當ajax發佈後,頁面凍結幾秒鐘

我該如何預防?

編輯:

代碼我使用的,當你發送Ajax請求確保異步設置爲true,它實際上收到非常大的數據

$.post("../ajax_updates.php", { time: last_update }, function(data) { 
    if (data) { 
    if (data != "") { 
    $("#news_feed").prepend($(data).fadeIn('slow')); 
    } 
    } 
    }); 
+0

你能供應所涉JavaScript代碼?聽起來你正在做一些回調,暫停頁面上的所有其他活動... – 2012-04-02 22:11:05

+0

我敢打賭,你關掉'async' – zerkms 2012-04-02 22:11:44

+0

@zerkms async默認設置,我沒有碰它 – 2012-04-02 22:14:44

回答

10

如果你通過JavaScript加載的數據量很大,這是正常的,因爲你的要求是synchronous這將使您的瀏覽器需要等待該請求結束之前做別的問題引起的。 您需要提出您的要求asynchronous

P.S.使用$ .get而不是$ .post來從服務器獲取信息,在某些情況下 - 特別是如果您在Windows IIS下編碼工作,您將得到一個有關該錯誤的錯誤。

P.S-1。有意義的$ .get用於從服務器獲取數據,$ .post用於發送數據。

試試這個:

$.ajaxSetup({ 
    async: true 
}); 

$.get("../ajax_updates.php", { time: last_update }, function(data) { 
    if (data && data != "") { 
    $("#news_feed").prepend($(data).fadeIn('slow')); 
    } 
}); 
+0

當我使用$ .get時,如何處理php上的其他數據? – 2012-04-02 22:20:15

+0

如果你不喜歡修改你的腳本,可以使用$ .post,如果你將$ .post更改爲$ .get,那麼你需要改變你的腳本的一小部分,因爲我認爲他會等待$ _POST [ 'last_update']但你把它傳遞給$ _GET php數組。 – h4cky 2012-04-02 22:23:20

+0

是的,我改變它$ _GET – 2012-04-02 22:24:44