如果结果包含键,如何停止ajax计时器

How to stop ajax timer if results contains key

本文关键字:何停止 ajax 计时器 结果 包含键 如果      更新时间:2023-09-26

我有一个简单的ajax函数:

<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包含stop后打破这个计时器。我该怎么做呢?

试试这个:

<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>

只是给你一个例子,检查data的内容-如果它符合你的条件(在你的情况下保持"停止")-> 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);
}

假设您的服务器返回一个项目数组,如

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

你可以检查返回的数组,看它是否有一个项目"stop",如果有,调用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);
           }

如果要返回一个项的集合,我强烈建议您返回一个数组,而不是一个连接的字符串。