Я не знаю много о JavaScript, вот код, у меня есть:JavaScript - Функция, возвращающая дважды
<script language="JavaScript">
var x = 10
function startClock() {
if (x !== ' ') {
x = x - 1
document.frm.clock.value = x
setTimeout("startClock()", 1000)
}
if (x == 0) {
x = ' ';
document.frm.clock.value = x;
success.location.href = "success.php";
}
}
</script>
<body onLoad(startClock);>
затрагиваемой IFrame:
<input name="clock" size="3" readonly="readonly"
<iframe name="success" src="blank.htm"></iframe>
, когда таймер отсчитывает, Success.php загружается дважды. Я знаю это потому, что 1.) Он дважды вставляет данные в мою БД, 2.) Я могу увидеть символ загрузки на вкладке, перезагружая секунду.
Когда я изменить функцию на что-то вроде:
<script language="JavaScript">
var x = 10
var y = 1
function startClock() {
if (x !== 'Fin') {
x = x - y
document.frm.clock.value = x
setTimeout("startClock()", 1000)
}
if (x == 0) {
x = 'Fin';
document.frm.clock.value = x;
success.location.href = "success.php";
}
}
</script>
... страница загружается только один раз.
Может ли кто-нибудь сказать мне, что здесь происходит? Я также попытался с помощью «0» вместо «» и получил тот же двойное исполнение ...
Изменение ваших вторых 'if' и' else if' может решить вашу проблему. – Ivan
* «Он дважды вставляет данные в мою БД». * Тогда вам может понадобиться исправить вашу страницу сервера. Операции 'GET' должны быть [idempotent] (http://en.wikipedia.org/wiki/Idempotence) (извините, не мое слово). Для операций, которые * изменяют * вещи, используйте 'POST' или один из других глаголов. (Исключение, на мой взгляд, является «посещением» данных.) –
В первой версии вашего вопроса использовалось значение флага '' ''. В текущей версии используется «Fin». Что он? О, подождите, он снова вернется к '' "'. –