2016-08-19 1 views
3

У меня есть простая функция АЯКС:Как остановить АЯКС таймер, если результаты содержит ключ

<script type="text/javascript" 
src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script type="text/javascript"> 
    function crunchifyAjax() { 
     $.ajax({ 
      url: '/user/show-user-task-messages?code=<c:out value="${liveCode}"/>', 
      success: function (data) { 
       $('#result').html(data); 
      } 
     }); 
    } 
</script> 
<script type="text/javascript"> 
    var intervalId = 0; 
    intervalId = setInterval(crunchifyAjax, 100); 
</script> 

Функция проверки каждый 100мс мой URL-адрес и вернуть текст так:

10 
9 
8 
7 
6 
5 
4 
3 
2 
1 
stop 

Я хочу, чтобы перерыв этот таймер после data содержит остановка. Как я могу это сделать?

Любая помощь в этом отношении очень ценится.

ответ

0

Попробуйте это:

<script type="text/javascript" 
src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script type="text/javascript"> 
    function crunchifyAjax() { 
     $.ajax({ 
      url: '/user/show-user-task-messages?code=<c:out value="${liveCode}"/>', 
      success: function (data) { 
       $('#result').html(data); 
       if((""+data).indexOf("stop") > -1) 
        clearInterval(intervalId); //clearing the interval started by setInterval 
      } 
     }); 
    } 
</script> 
<script type="text/javascript"> 
    var intervalId = 0; 
    intervalId = setInterval(crunchifyAjax, 100); 
</script> 
+0

'stop' неопределен –

+0

извините @The_ehT ...! спасибо за указание на эту ошибку ... ':)'! – vijayP

+0

Работа хорошо. Спасибо за помощь. –

0

Предположим, что ваш сервер возвращает массив элементов, как

["1","2","4","stop","6"] 

Вы можете проверить массив возвращается и посмотреть, есть ли пункт «stop», и если да, call clearInterval способ.

success: function (data) { 
      $('#result').html(data); 
      var subset = data.filter(function (a) { 
        return a === "stop"; 
      }); 
      if (subset.length > 0) { 
        window.clearInterval(intervalId); 
     } 
} 

Если сервер возвращает строку, как "1,3,5,stop,6", вы можете сделать indexOf метод, чтобы проверить наличие конкретной строки

success: function(data) { 
      $('#result').html(data); 
      if (data.indexOf("stop") > -1) { 
       window.clearInterval(intervalId); 
      } 

Если вы возвращаете коллекцию предметов, я настоятельно рекомендую вы должны вернуть массив вместо конкатенированной строки.

+0

Я получаю: 'Uncaught TypeError: data.filter не является функцией' –

+0

Вы возвращаете массив (см. Первую часть моего ответа)? filter - метод для массива. Я настоятельно рекомендую вам не возвращать строку, если вы возвращаете несколько значений. возврат массива имеет смысл, если вы хотите вернуть больше предметов. – Shyju

+0

Нет, это не массив, это plaintext –

0

Просто чтобы дать вам пример, проверить содержание data «s - и если это соответствует вашему условию (в вашем случае проведение„стоп“) ->clearInterval().

пустышки Код:

var intervalId = null; 
var x = 0; 
intervalId = setInterval(crunchifyAjax, 100); 

function crunchifyAjax() { 
    if (x < 10) { 
     x++; 
     console.log(x); 
     return true; 
    } 
    clearInterval(intervalId, crunchifyAjax); 
} 
Смежные вопросы