У меня есть javascript setInterval, который проверяет внешнюю страницу каждые 5 секунд на наличие почты, иногда я обнаруживаю, что, если я вхожу в систему или нажимаю на форму, отправляемую одновременно с отправкой запроса, иногда я вижу, что или N (что должен был перехватить мой JS) вместо реальной ссылки, на которую я хотел перейти.
Как можно это отладить? Я использую Firefox с Firebug, мое приложение использует PHP с JavaScript.
РЕДАКТИРОВАТЬ: это почти как если бы onComplete пропустил Java, и он просто сбрасывает его, когда пользователь входит в систему .... это происходит только тогда, когда кто-то меняет страницы и одновременно запускается Java.
РЕДАКТИРОВАТЬ 2: Если вы хотите убедиться в этом сами, вам нужно посетить мой сайт и создать учетную запись и пройти процедуру регистрации (2-3 минуты, чтобы сделать топы), веб-сайт http://mikesandmegs.com, а бета-пароль goldfish . То, что вы хотите сделать, это войти в систему так же, как чек по почте отправляет свой запрос. Как будто мне нужно что-то отменить или сказать 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>