Вход

Просмотр полной версии : Как остановить выполнение яваскрипта ?


Serjuk
09.06.2012, 19:29
Здравствуйте, возник вопросик :
У меня при открытии страницы начинает выполняться javascript, таким образом:
<script type="text/javascript">
getPOST();
function getPOST () {
....
}
Причем функция getPOST посылает на сервер каждую секунду запрос.
</script>
Также на странице находится кнопка - по нажатию на кнопку должно произойти следующее:
1. Остановится выполнение скрипта. (getPOST) .
2. Выполнить свое действие.
Меня интересует как остановить выполнение скрипта.
Помогите, пожалуйста.

Aetae
09.06.2012, 19:31
Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел .
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.

Gvozd
09.06.2012, 19:36
В общем случае - никак.
Надо смотреть конкретный код.
С учетом того, что запрос выполянется каждую секунду, может поможет такой код:

for(var i = 0; i <= setTimeout(function(){},0); i++) {
clearTimeout(i);
}
for(var i = 0; i <= setInterval(function(){},0); i++) {
clearInterval(i);
}

Но, во-первых такой код остановит абсолютно все скрипты, которые в данный момент регулярно выполняются.
То есть анимации, например также будут остановлены
Во-вторых надо проверить кроссбраузерность. Оставляю эту задачу Вам

ILL-JAH
13.06.2012, 22:31
Serjuk,

<script type="text/javascript">
function getPOST () {
....
}
var aaa = setInterval(getPOST, 1000);
document.getElementById("id кнопки").onclick = function() {
clearInterval(aaa);
Выполнить своё действие.
}
</script>

clearInterval() не прервёт текушее выполение функции getPOST в том месте, где она выполняется. clearInterval() отменит следующий очередной запуск функции getPOST.

Serjuk
16.06.2012, 13:30
ILL-JAH,
Спасибо, попробовал, но почему то не останавливает..Как идет так и идет.
я сделал так:


...
var status = setInterval(getPOST, 1000);
document.getElementById("stop").onclick = function() {
clearInterval(status);
}
function getPOST () {
....
}

По нажатию на надпись

<a class="border" href="#" id="stop">Остановить</a></p>

Deff
16.06.2012, 14:17
Serjuk,

<script>
var status = setInterval(getPOST, 2000);
document.getElementById("stop").onclick = function() {
clearInterval(status);
}
function getPOST () {
alert("getPOST")
}
</script>
<a class="border" href="#" onclick="clearInterval(status);return false">Остановить</a>

tadjik1
16.06.2012, 15:12
запросы можно останавливать через их собственный метод abort(), но для этого нужно иметь ссылку на запрос.

var a = $.get('//javascript.ru/', function(data) { console.info('recieved data'); });

a.abort();

Serjuk
16.06.2012, 18:53
Deff,Почему то никак не реагирует на нажатие на "Остановить". Хотя сделал аналогично.

ILL-JAH
16.06.2012, 19:36
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>abort action</title>
</head>

<body>
<div>
<p id="p1">0</p>
<input id="but1" type="button" value="остановить счётчик"/>
</div>
<script type="text/javascript">
var a = 1;
function getPOST() {
document.getElementById("p1").innerHTML = a++;
}
var aaa = setInterval(getPOST, 1000);
document.getElementById("but1").onclick = function () {
clearInterval(aaa);
alert("Всё работает! Не надо ля-ля!!!");
}
</script>
</body>
</html>

Serjuk
16.06.2012, 20:54
ILL-JAH,
Не получается... Сколько не жму на кнопку - запрос все идет и идет. Вот как у меня:


<script type="text/javascript">
getName();
function getName () {
var number = 0;
var aaa = setInterval(getPOST, 1000);
document.getElementById("but1").onclick = function () {
clearInterval(aaa);
}

function getPOST () {
number = number + 1;

if (number < 60){

$.ajax({
type: 'POST', url: ссылка ,data:data,
success: function(res) {
// какие то действия
}
});
}
if ( number > 60) {
//какие то действия
}
}

}
</script>
<input id="but1" type="button" value="Остановить"/>

ILL-JAH
16.06.2012, 22:04
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>stopDefAction</title>
</head>
<body>
<div>
<input id="but1" type="button" value="Остановить"/>
<p id="counter"></p>
</div>
<script type="text/javascript">
function getName() {
var number = 0;
function getPOST() {
number++;
if (number < 6) {
document.getElementById("counter").innerHTML = number + " POST<br />";
/*
$.ajax({
type: 'POST', url: ссылка, data: data,
success: function (res) {
// какие то действия
}
});*/
} else {
document.getElementById("counter").innerHTML = number + " какие то действия<br />Пыщь, пыщь!!! ОЛОЛО!!!";
//какие то действия
}
}
document.getElementById("but1").onclick = function () {
clearInterval(aaa);
}
var aaa = setInterval(getPOST, 1000);
}
getName();
</script>
</body>
</html>

ILL-JAH
16.06.2012, 22:09
Сам скрипт работает отлично. Что вам нужно отправить 60 раз методом POST? Что это за данные такие?

Dim@
16.06.2012, 23:10
Serjuk,
ILL-JAH, все пишет абсолютно правильно скорее всего ваша ошибка в "каких-то действиях"

Serjuk
17.06.2012, 12:31
CILL-JAH,
Спасибо ! У меня скрипт находился в head поэтому и не работало.
А еще вопрос, а если мне нужно по нажатию на кнопку "Остановить" перезапустить процесс, т.е. идет, например, отчет 1,2,3,4,5,6. Нажал на кнопку "Остановить" . Отчет остановился и пошел заново 1,2,3,4 и тд. И так можно делать много раз.

Dim@
17.06.2012, 14:10
Serjuk,
да можно
<html>
<head>
<meta charset='utf-8'>
</head>
<body onload='LOL()'>
<script type='text/javascript'>
document.i = 0;
function LOL(){
document.a = setInterval('Chet()',1000);
}
function Chet(){
document.i++;
document.getElementById('b').innerHTML = document.i;
}
</script>
<b id='b'>0</b>
<input type='button' value='Заново' onclick='document.i = 0;clearInterval(document.a);LOL()'>
</body>
</html>

чистим интервал в кнопке и меняем document.i тоже в кнопке (я это сделал для наглядности, но можно сделать так и в функции:) )

Serjuk
17.06.2012, 18:04
Вот попробовал модифицировать пример ILL-JAH,
Идея в чем:страница с самого начала отправляет запросы (предположим число 1). По нажатию на кнопку - останавливаются запросы с числом 1 и начинаются запросы с числом 2. Повторное нажатие на кнопку остановит запросы с числом 2 и начнутся запросы с числом 3 и тд.
Что происходит сейчас: Запросы с числом 1 останавливаются и идут запросы с числом 2. Тут все нормально, но стоит нажать еще раз, то тут будут идти запросы с числом 2 и числом 3, т.е. число 2 не останавливается, если еще раз нажать, то будут и 2 и 3 и 4.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>stopDefAction</title>
</head>
<body>
<div>
<input id="but1" type="button" value="Остановить"/>
<p id="counter"></p>
</div>
<script type="text/javascript">
function getName() {
var number = 0;
function getPOST() {
number++;
if (number < 6) {
document.getElementById("counter").innerHTML = number + " POST<br />";
/*
$.ajax({
type: 'POST', url: ссылка, data: data,
success: function (res) {
// какие то действия
}
});*/
} else {
document.getElementById("counter").innerHTML = number + " какие то действия<br />Пыщь, пыщь!!! ОЛОЛО!!!";
//какие то действия
}
}
document.getElementById("but1").onclick = function () {
clearInterval(aaa);

$.ajax({
type: 'POST', url: ссылка, data: ДРУГИЕ ДАННЫЕ ,
success: function (res) {
function getPOST() {
number++;
if (number < 6) {
document.getElementById("counter").innerHTML = number + " POST<br />";
} else {
document.getElementById("counter").innerHTML = number + " какие то действия<br />Пыщь, пыщь!!! ОЛОЛО!!!";
}
}
var aaa = setInterval(getPOST, 1000);
}
});


}
var aaa = setInterval(getPOST, 1000);
}
getName();
</script>
</body>
</html>

Dim@
17.06.2012, 20:04
<html>
<head>
<meta charset='utf-8'>
</head>
<body onload='LOL()'>
<script type='text/javascript'>
document.i = 0;
function LOL(){
document.k = document.i;
document.a = setInterval('Chet()',1000);
}
function Chet(){
document.i++;
document.getElementById('b').innerHTML = document.i;
}
</script>
<b id='b'>0</b>
<input type='button' value='Заново' onclick='document.i = document.k + 1;clearInterval(document.a);LOL()'>
</body>
</html>

Serjuk
17.06.2012, 20:16
Dim@,
Я наверное не много не правильно написал, под цифрами я имел ввиду, что данные разные в запросах..Извини)Просто при том коде у меня получается, что только при первом разе он работает - отключает первый и включает второй, а при следующих запросах ( нажатиях на кнопку) он не хочет убить предыдущий, а просто к предыдущему прибавляет следующий..

Dim@
17.06.2012, 22:15
Serjuk,
switch делай:dance:

Serjuk
17.06.2012, 22:29
Каким образом? у меня конструкция таким образом, как показана выше))

Dim@
17.06.2012, 22:32
Serjuk,
делай счетчик по нажатию кнопки увеличивай и делай switch если счетчик равно блаблабла то делать блаблабла понятна конструкция?