我有一个javascript setInterval,每隔5秒检查一次外部页面的邮件,我发现有时候如果我在请求发出的同时登录或点击表单提交,我有时会发现自己看着Y或者N(我的JS要截取的是什么)而不是我想去的真实链接。
如何调试这个?我使用firefox与firebug,我的应用程序使用PHP与JavaScript。
编辑:这几乎就好像java错过了onComplete,它只是在用户登录时转储它....它只会在有人更改页面并且java同时运行时发生。编辑2:如果您想亲眼看到这一点,您需要访问我的网站并创建一个帐户并完成注册过程(2-3分钟即可完成)网站为http://mikesandmegs.com,测试版密码为金鱼。您要做的就是在检查邮件发送请求时登录。它就像我需要取消某些东西或告诉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 :(得分:1)
我知道这远不是一个解决方案,但它将有助于增加5秒间隔,甚至达到30秒。我之前已经完成了对邮件服务器的工作,并且我们经常遇到人们可能会遇到的问题,例如他们的iphone以及他们的桌面邮件客户端以非常短的间隔ping服务器。由于锁定,这将导致混淆(对他们)失败。
所以是的,5秒的消息非常快(它看起来不像是聊天,而只是消息,是吗?)。充其量只要你这样做,那么如果全部问题将会发生更少的问题。然而,你会有可能发生的可怕知识。
请不要将此作为解决问题的尝试。只是一个建议。
答案 1 :(得分:0)
我认为正在发生的事情是,在更改页面时,来自mail-check.php的数据与同时从网络返回的新请求发生冲突。我认为一个可能的解决方案是每当您更改页面或提交表单时禁用setInterval,然后在加载新数据后重新启用它。
类似的东西:
<input type="button" onClick="clearInterval('mailTimer'); this.submit()" />
...