Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Срабатывание несколько форм через разные интервалы времени (https://javascript.ru/forum/misc/48251-srabatyvanie-neskolko-form-cherez-raznye-intervaly-vremeni.html)

spider 26.06.2014 19:38

Срабатывание несколько форм через разные интервалы времени
 
Здравствуйте, не нашел тут раздел для новичков, поэтому пишу сюда.
Моя задача очень простая, на html странице будет 5 разных форм, каждая будет отправлять данные на разные сайты. Делается это для того, т.к. я не знаю, какой из сайтов будет работать, а какой будет под ддосом.
Соответственно я решил, что через допустим секунд 5 будет срабатывать последовательно одна из форм.
Т.е. сразу срабатывает первая форма, если сайт под ддосом, то через 5 секунд срабатывает вторая форма и т.д.

Сделал простой скриптик, но почему-то выдает Hello сразу, в чем моя ошибка?

<head>
<script language="javascript">
function ToBilling()
{
setInterval(RunCheck(), 300000);
}

function RunCheck()
{
alert("Hello");
}
</script>
</head>

<body onload="ToBilling();">
</body></html>


Заранее спасибо за ответ!

Update:
<html><head>
<script language="javascript">
function ToBilling()
{
document.forms.checkout1.submit();
setTimeout(a=1, 1000);
document.forms.checkout2.submit();
setTimeout(a=1, 1000);
document.forms.checkout3.submit();
setTimeout(a=1, 1000);
document.forms.checkout4.submit();
}
</script>
</head>

<body onload="ToBilling();">


<form action="http://148.251.15.1/" method="post" name="checkout1" id="checkout1">
<noscript><input type="submit" value="Please click here to continue" /></noscript>
</form>


<form action="http://148.251.15.2/" method="post" name="checkout2" id="checkout2">
<noscript><input type="submit" value="Please click here to continue" /></noscript>
</form>


<form action="http://148.251.12.3/" method="post" name="checkout3" id="checkout3">
<noscript><input type="submit" value="Please click here to continue" /></noscript>
</form>


<form action="http://148.251.15.4/" method="post" name="checkout4" id="checkout4">
<noscript><input type="submit" value="Please click here to continue" /></noscript></form>

</body></head></html>

Взял наугад 4 IP, причем отзывается только третий, 148.251.12.3, к сожалению не срабатывает, может кто-то еще посоветует решение?

jsnb 27.06.2014 05:47

Цитата:

Сообщение от spider (Сообщение 318112)
в чем моя ошибка?

В том, что перед тем как что-то писать надо хоть немного почитать о том, как оно работает.
setInterval(RunCheck(), 300000);

Функция RunCheck запускается в этой строке, а в таймер на исполнение попадает то, что возвращает эта функция, в данном случае undefined. Если надо запускать функцию RunCheck каждые 300 секунд, то это будет выглядеть так:
setInterval(RunCheck, 300000);


Цитата:

Сообщение от spider (Сообщение 318112)
function ToBilling()
{
document.forms.checkout1.submit();
setTimeout(a=1, 1000);
document.forms.checkout2.submit();
setTimeout(a=1, 1000);
document.forms.checkout3.submit();
setTimeout(a=1, 1000);
document.forms.checkout4.submit();
}

А это вообще непонятно что...

spider 27.06.2014 12:56

Цитата:

Сообщение от jsnb (Сообщение 318172)
Функция RunCheck запускается в этой строке, а в таймер на исполнение попадает то, что возвращает эта функция, в данном случае undefined. Если надо запускать функцию RunCheck каждые 300 секунд, то это будет выглядеть так:
setInterval(RunCheck, 300000);



А это вообще непонятно что...

Спасибо большое с Hello заработало, а вот под этим я имел ввиду, что думал последовательно запустятся 4 функции, каждая из которая через 1 секунду выполнит html форму, т.к. я перепробовал уже много разных вариантов, то и вместо функции просто к переменной a присваивал 1

К сожалению не работает даже просто так:
function ToBilling()
{
setTimeout(document.forms.checkout3.submit, 5000);
}

Т.е. как я считаю эта функция должна через 5 секунд запустить обработку формы с именем checkout3

В итоге я хотел, чтобы у меня запускалась сначала одна форма(c именем checkout1), если сервер не отвечает, то через 3 секунды другая форма(c именем checkout2), если сервер у второй формы не отвечает, то через 3 секунды третья(c именем checkout3) и т.д.
Как мне казалось, что это должно выглядеть как:
function ToBilling()
{
setTimeout(document.forms.checkout1.submit, 0);
setTimeout(document.forms.checkout2.submit, 3000);
setTimeout(document.forms.checkout3.submit, 3000);
setTimeout(document.forms.checkout4.submit, 3000);
}

BETEPAH 27.06.2014 14:07

Цитата:

Сообщение от spider
если сервер не отвечает

это ключевые слова, от которых надо отталкиваться. Отправляйте формы асинхронно, проверяя ответ сервера. В случае отказа запускайте отправку по следующему адресу.
А через .submit() отправка застопорится на первой форме, остальные обрабатываться не будут.

spider 27.06.2014 14:40

Цитата:

Сообщение от BETEPAH (Сообщение 318244)
это ключевые слова, от которых надо отталкиваться. Отправляйте формы асинхронно, проверяя ответ сервера. В случае отказа запускайте отправку по следующему адресу.
А через .submit() отправка застопорится на первой форме, остальные обрабатываться не будут.

Эх, если все так сложно, то проще кроном раз в 5 минут все серваки обходить и уже с помощью php генерировать одну нужную форму. Я просто думал, что в js это можно сделать очень легко


Часовой пояс GMT +3, время: 05:09.