台灣最大程式設計社群網站
線上人數
1292
 
會員總數:246037
討論主題:189624
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> 如何停止回送AJAX請求的資料?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何停止回送AJAX請求的資料?
價值 : 300 QP  點閱數:2530 回應數:5
樓主

nickcatwang
門外漢
0 17
518 39
發送站內信

請教各位前輩,我透過自己定義的AJAX,不是用.net的AJAX元件,
寫一個讀取期貨報價的網頁,向asp請求資料
每300毫秒請求一次資料更新

user可以點選更新更換不同的資料,例如本來要看歐元報價,後來更換成看黃金的報價

結果...更換成看黃金的報價後,歐元報價還源源不斷的送進來,
好像是之前請求的歐元報價還沒有xmlhttp.status==200
每次更換商品後,都要跑個十幾二十次的之前請求的報價回來
...才會輪到新選取的報價出現

是否有方式可以強制停止呢?






搜尋相關Tags的文章: [ ajax ] ,
本篇文章發表於2010-06-21 22:22
1樓
回應

cloudio
捐贈 VP 給 cloudio 檢舉此回應
把timeout_tickdata跟xmlhttp設成全域變數
在呼叫
clearTimeout(timeout_tickdata);
xmlhttp.abort();
就好了
如果單純呼叫xmlhttp.abort();因為setTimeout還是沒被清掉,還是會繼續動作
試看看囉
本篇文章回覆於2010-06-22 00:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

nickcatwang
檢舉此回應
settimeout已經透過全域變數clear了
補上xmlhttp.abort後測試,結果是一樣的
好像問題不在於此,而在client端處理不了這麼快速的資料更新的樣子
本篇文章回覆於2010-06-24 21:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

cloudio
捐贈 VP 給 cloudio 檢舉此回應
hello,抱歉
之前沒有看的很清楚
你的需求是300毫秒要重複一直呼叫?
首先你的server這麼耐操阿?
如果你真的要300毫秒重複呼叫的話,你為什麼不用setInterval呢
只要在呼叫的地方
timeout_tickdata = setInterval("xmlAJAXTickData(\"" + strAskFor + "\",\"" + no + "\"," + refreshTime + ")", refreshTime);
就好囉,也不必在xmlAJAXTickData中在叫一次setTimeout

我這邊是這樣改寫你的code的(測試用)
也測試過是OK的,一樣用300毫秒,我想
xmlhttp.abort();
clearTimeout(timeout_tickdata);
這兩段程式跑的速度應該是快過300毫秒才對,應該沒有先要先跑的差別...
在請你測試一次囉。
本篇文章回覆於2010-06-24 23:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

jack
捐贈 VP 給 怎有人這麼喜歡改暱稱 檢舉此回應
您要不要 在
25 xmlhttp.onreadystatechange = function() {
再做一次
if (document.getElementById("tickno").value == No) {...}
check...?
看您的
24 var xmlhttp = createXMLHTTPObject(); //宣告xmlhttp
應該很花時間?


或是 您的
createXMLHTTPObject()
要不要 一開始 就先做一次? 用個變數記起來
之後 就直接使用該物件?
這樣 速度應該會快很多

您一直 create obj,
應該要留意一下 client端 記憶體 是不是很快被您吃光...
雖然現在光華賣的PC隨便都是 4G 8G 起跳
但是 難保證 不會遇到 5.6年前的老舊NB 只有500M記憶體 卻想要使用貴網站的該service!?

又,
41 function trclick(strNo) {
裡,前面有了
42 if (document.getElementById("tickno").value != strNo) {
後面這句 似乎就多餘了?
45 document.getElementById("tickno").value = strNo;

最後同樣建議您使用 setInterval...
如果您將
42 if (document.getElementById("tickno").value != strNo) {
判斷改到
23 function xmlAJAXTickData(strAskFor, no, refreshTime) {
裡面
您應該
41 function trclick(strNo) {
這一整個 func.都可以不用了吧?
用setInterval 對client端來說 運作會比較順暢!
本篇文章回覆於2010-08-10 00:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
不錯的參考

shinyo.her
捐贈 VP 給 shinyo.her 檢舉此回應
http://msdn.microsoft.com/zh-tw/magazine/cc163363.aspx#S6

可供參考
本篇文章回覆於2010-08-17 15:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.