Просмотр полной версии : Как остановить выполнение яваскрипта ?
Здравствуйте, возник вопросик :
У меня при открытии страницы начинает выполняться javascript, таким образом:
<script type="text/javascript">
getPOST();
function getPOST () {
....
}
Причем функция getPOST посылает на сервер каждую секунду запрос.
</script>
Также на странице находится кнопка - по нажатию на кнопку должно произойти следующее:
1. Остановится выполнение скрипта. (getPOST) .
2. Выполнить свое действие.
Меня интересует как остановить выполнение скрипта.
Помогите, пожалуйста.
Здравствуйте!
Судя по вашему сообщению, вы ну совсем не знаете javascript.
Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.
На сайте javascript можно начать изучать с учебника, раздел .
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/
Задавайте конкретные вопросы по ходу дела.
В общем случае - никак.
Надо смотреть конкретный код.
С учетом того, что запрос выполянется каждую секунду, может поможет такой код:
for(var i = 0; i <= setTimeout(function(){},0); i++) {
clearTimeout(i);
}
for(var i = 0; i <= setInterval(function(){},0); i++) {
clearInterval(i);
}
Но, во-первых такой код остановит абсолютно все скрипты, которые в данный момент регулярно выполняются.
То есть анимации, например также будут остановлены
Во-вторых надо проверить кроссбраузерность. Оставляю эту задачу Вам
Serjuk,
<script type="text/javascript">
function getPOST () {
....
}
var aaa = setInterval(getPOST, 1000);
document.getElementById("id кнопки").onclick = function() {
clearInterval(aaa);
Выполнить своё действие.
}
</script>
clearInterval() не прервёт текушее выполение функции getPOST в том месте, где она выполняется. clearInterval() отменит следующий очередной запуск функции getPOST.
ILL-JAH,
Спасибо, попробовал, но почему то не останавливает..Как идет так и идет.
я сделал так:
...
var status = setInterval(getPOST, 1000);
document.getElementById("stop").onclick = function() {
clearInterval(status);
}
function getPOST () {
....
}
По нажатию на надпись
<a class="border" href="#" id="stop">Остановить</a></p>
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>
запросы можно останавливать через их собственный метод abort(), но для этого нужно иметь ссылку на запрос.
var a = $.get('//javascript.ru/', function(data) { console.info('recieved data'); });
a.abort();
Deff,Почему то никак не реагирует на нажатие на "Остановить". Хотя сделал аналогично.
<!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>
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="Остановить"/>
<!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>
Сам скрипт работает отлично. Что вам нужно отправить 60 раз методом POST? Что это за данные такие?
Serjuk,
ILL-JAH, все пишет абсолютно правильно скорее всего ваша ошибка в "каких-то действиях"
CILL-JAH,
Спасибо ! У меня скрипт находился в head поэтому и не работало.
А еще вопрос, а если мне нужно по нажатию на кнопку "Остановить" перезапустить процесс, т.е. идет, например, отчет 1,2,3,4,5,6. Нажал на кнопку "Остановить" . Отчет остановился и пошел заново 1,2,3,4 и тд. И так можно делать много раз.
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 тоже в кнопке (я это сделал для наглядности, но можно сделать так и в функции:) )
Вот попробовал модифицировать пример 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>
<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>
Dim@,
Я наверное не много не правильно написал, под цифрами я имел ввиду, что данные разные в запросах..Извини)Просто при том коде у меня получается, что только при первом разе он работает - отключает первый и включает второй, а при следующих запросах ( нажатиях на кнопку) он не хочет убить предыдущий, а просто к предыдущему прибавляет следующий..
Serjuk,
switch делай:dance:
Каким образом? у меня конструкция таким образом, как показана выше))
Serjuk,
делай счетчик по нажатию кнопки увеличивай и делай switch если счетчик равно блаблабла то делать блаблабла понятна конструкция?
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot