2012-02-23 61 views
0

好的,所以我會盡我所能解釋這是如何工作的。這是針對手機的,所以我使用的是Jquery手機。Jquery changPage函數不會停止緩存請求

1)用戶從項目列表中進行選擇 - >在DOM頁面中選擇到外部。

2)用戶將表單提交到另一個尚未在DOM中的外部頁面。

3)該頁面每2秒刷新一次div,使用此代碼獲取我們剛剛提交的元素的狀態(大約需要15秒才能通過我們的最終狀態點)。

<script> 
$('#status').empty();  
setInterval(function() { 
$('#status').load('/call/status/<?php echo $call->sid?>'); 
}, 2000); 
</script> 

4)一旦達到最終狀態消息我們要刷新,並將其送往是在所述第一組元素(點1)的一個元素。我使用此代碼作爲最終消息來觸發更改頁面事件回到第一組頁面。

<script>$.mobile.changePage("#inbox",{transition:"slideup"}); </script> 

奇怪的是,我可以得到這個工作,但只有第一次。一旦我回到這個過程中,它有原始的#status div仍然被緩存,並試圖讓我提前回到#input。你可以看到我有一個$('#status')。empty();運行時應該在下次出現時這個div已經被銷燬了嗎?

謝謝!

+1

$(「#status」)。empty()是否應該在間隔內?我不知道你的腳本是如何設置的,所以也許不會。 – 2012-02-23 05:50:50

+0

如果我這樣做,#status div令人討厭地閃爍。我不認爲這應該有所作爲。但我顯然不是專家。 – 2012-02-23 05:56:43

+0

是的,這就是爲什麼這樣做不是一個好的做法。許多服務器調用。 – 2012-02-23 06:31:25

回答

0

這是我推薦的代碼,雖然這不會清空容器。這不會解決你最初的問題,但我認爲你會發現它更順暢。這將確保您在前一個請求完成之前不會將請求發送到服務器,而setInterval會執行該請求,它不知道請求是否已完成。我建議(當你打算涉及任何服務器調用時,或者甚至是任何時候,SetInterval都不是很好)至少使用這種方法,而不是間隔。

function status(){ 

    $('#status').load('/call/status/<?php echo $call->sid?>', function(){ 
    //this is to be performed on success of the load 
    setTimeout(status, 2000); 
    }); 

} 
setTimeout(status, 2000); 

雖然我很樂意嘗試解決您最初的問題,但我需要更多的細節來了解它的工作原理。