我有一个 javascript setInterval 每 5 秒检查一次外部页面是否有邮件,我有时发现如果我在请求发出的同时登录或单击表单提交,我有时会发现自己在看 Y或 N(我的 JS 要拦截的内容)而不是我想去的真实链接。
如何调试这个?我将 firefox 与 firebug 结合使用,我的应用程序将 PHP 与 javascript 结合使用。
编辑:就好像 java 错过了 onComplete 一样,它只是在用户登录时将其转储....只有当有人正在更改页面并且 java 同时运行时才会发生。
编辑 2: 如果您想亲眼看看,您需要访问我的网站并创建一个帐户并完成注册过程(2-3 分钟完成),网站是http://mikesandmegs.com测试版密码是goldfish。您要做的是在支票邮件发送请求时登录。就像我需要取消某些东西或告诉 java 抛出回调或其他东西。您应该每 5 秒看到一次请求(每个请求会增加 5 秒),但您会看到。 这可能需要几次尝试或一些运气,但它是可重现的。
这是正在运行的 javascript(我想我已经发布了所有内容)如果我似乎遗漏了什么,请告诉我。我还发布了 javascript 检查的 htnl 输入 html...
<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>
最佳答案
我知道这远不是解决方案,但它会有助于增加 5 秒的间隔,甚至增加到 30 秒左右。我以前做过邮件服务器的工作,我们经常遇到人们会遇到的问题,例如他们的 iphone 以及他们的桌面邮件客户端以非常短的时间间隔对服务器执行 ping 操作。这将导致(对他们而言)由于锁定而导致的失败失败。
是的,5 秒的消息速度非常快(它看起来不像聊天,而只是消息,对吗?)。充其量,如果您这样做,那么问题发生的次数就会少得多。然而,你会知道它可能会发生。
请不要将此视为尝试解决您的问题。只是一个建议。
关于php - 被重定向到错误的地方 - 有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1041279/