2009-06-24 22 views
2

我有一個JavaScript的setInterval,每5秒檢查一次外部頁面的郵件,我發現有時候,如果我登錄或點擊表單提交的請求同時出去,我有時會發現自己正在看Y或N(我的JS要截取的內容),而不是我想去的真正鏈接。被重定向到錯誤的地方 - 有時

如何調試?我正在用firebug使用firefox,我的應用程序正在使用PHP與JavaScript。

編輯:它幾乎就像是由java錯過了onComplete,它只是當用戶正在登錄時轉儲它....它只發生在有人正在更改頁面,並且java正在同時運行。

編輯2:如果你想看到自己這一點,你需要訪問我的網站,並創建一個帳戶,並辦理註冊過程(2-3分鐘,做檯面),該網站是http://mikesandmegs.com和beta密碼是金魚。只要檢查郵件發送請求,你想要做的就是登錄。它就像我需要取消某些東西或者告訴java拋出回調或者其他東西。您應該每隔5秒查看一次請求(每次請求會增加5秒),但您會看到。 這可能需要一些嘗試或運氣,但它是可重複的。

這是正在運行的JavaScript(我想我已經發布了所有內容)如果我似乎缺少任何東西,請告訴我。我也貼一個htnl輸入的HTML的JavaScript檢查...

<input id="hasMail" type="hidden" value="y"> 

<script type='text/javascript'> 
    mailTimer = setInterval("checkMail();", 10000); 

function checkMail() 
{ 
    // should we check the mail now? 
    if ($('hasMail').value == "y") 
    { 
     // remove mail new mail alert (mail-check.php returns y or n 
     new Ajax.Request('mail-check.php', 
     { 
      method: 'post', 
      postBody: '', 
      onComplete: checkMailNotify 
     }); 
    } 
} 

    function checkMailNotify(req) 
    { 
     if (req.responseText.length > 5) 
     { 
      $('hasMail').value = "n"; 
      clearInterval (mailTimer); 
      return; 
     } 

     if (req.responseText == "y") 
     { 
      $('hasMail').value = "n"; 
      $('topMessage').update('<a href="/mail-inbox.php">You have new mail...</a>'); 
      $('alertBox').appear(); 
      clearInterval (mailTimer); 
     } 
     else 
     { 
      clearInterval (mailTimer); 
      mailInterval = mailInterval + 5000; 
      mailTimer = setInterval("checkMail();", mailInterval); 
     } 
    } 

</script> 
+0

你可以通過發佈這是造成這個 – 2009-06-24 22:16:28

+0

槽糕的代碼開始,貌似沒有什麼不妥我。 您的測試網站是否公開?如果是,我們可以得到一個鏈接嗎? 如果我正在調試這個,我會......等等,我只是注意到你說你在看XML。它看起來像你的腳本期望只返回幾個字符......你的腳本是發佈XML還是奇蹟般地出現? – 2009-06-24 22:33:52

+0

對不起,我說我在看XML,我犯了一個錯誤只是一個Y或N,我的JavaScript應該攔截 – MichaelICE 2009-06-24 22:36:37

回答

1

我知道這是隔靴搔癢的解決方案,但它會有助於提高5秒的時間間隔,甚至像30秒。我之前做過郵件服務器的工作,而且我們經常遇到一些問題,例如,他們的iphone以及他們的桌面郵件客戶端會在很短的時間間隔內ping服務器。這會導致(由於鎖定而導致他們混淆)失敗。

所以是的,消息5秒很快(它看起來不像聊天,而只是消息,是嗎?)。最好如果你這樣做,那麼問題就會少得多。然而,你會有可怕的知識。

請不要將此作爲解決您的問題的嘗試。只是一個建議。

0

我認爲發生的事情是,在更改頁面時,mail-check.php中的數據與來自網絡的新請求同時發生衝突。我認爲一個可能的解決方案是在每次更改頁面或提交表單時禁用setInterval,然後在加載新數據後重新啓用它。

喜歡的東西:

<input type="button" onClick="clearInterval('mailTimer'); this.submit()" /> 
... 
相關問題