多个ajax请求的setInterval问题

时间:2012-01-04 22:19:05

标签: php ajax

我一直在阅读有关setInterval的内容,并提出了自己的方式从一个页面发送多个ajax请求。问题是,按下按钮1后按下按钮2,它会停止发送多个请求,如果我再次按下按钮1,它不会停止前一个setInterval()并启动并行请求。我想要实现的是,当我按下按钮1时,它必须只打印“1”30次,当我按下按钮2时,它必须停止打印“1”但是在睡眠5秒后打印“2”并且如果我按下再次按钮1必须再次开始打印“1”并停止打印“2”。以下是我的代码:

<script language='javascript'>
var request = 0;
var request1 = 0;
$(document).ready(function () {
    $("#hi button").click(function () {

        var id = this.id;
        if(request!=0){
            clearInterval(request);
            request1.abort();
        }
        request = setInterval(do_it,1000,id);           
    });
});

function do_it(id) {
        request1 = $.ajax({ 
        url: "php.php?id=" + id,
        success: function (result) {
            $("#result").html(result);
            }
        });
}
</script>

<div class="hi" id="hi">
    <button id="1" ></button>
    <button id="2" ></button>
    </div>

<div id="result"></div>

PHP代码:

<?php
$word='';
include('sql_connect.php');
if($_GET['id'] == '1') {
    $main = '1';

    for($i = 0; $i < 30; $i++) {
        $word .= $main . "<br>";
    }
    echo $word;
}

if($_GET['id'] == '2') {
    $a = 0; 

    while($a != 1) {
        sleep(5);
        $a=1;
    }               
    echo "2";
}
?>

感谢任何帮助。感谢

5 个答案:

答案 0 :(得分:1)

在setInterval中设置函数时,该函数应该用引号括起来,或者你可以使用匿名函数(下面的例子用引号括起来)。 另外,您为setInterval指定了错误的第三个参数。

setInterval中的第三个参数是: Lang:用于指定脚本语言的可选参数,例如:Jscript,Javascript,vbscript。

setInterval(do_it, 1000, id);

应该是

setInterval('do_it(' + id + ')', 1000);

答案 1 :(得分:0)

我对jquery不太熟悉(我只是开箱即用的javascript),但我过去曾经在定时循环中处理ajax调用。需要考虑的一件事是,如果你正在进行异步ajax调用,那么无论先前的ajax响应是否被调用,setInterval / setTimeout都将继续运行(除非你在响应函数中调用setTimeout,然后是ajax请求和响应调用将同步运行)。或者你可以做同步的ajax调用 - 如果这是有意义的

答案 2 :(得分:0)

您必须将clearInterval()的输出分配给request,以便它不会再次点击if语句:request = clearInterval(request); - 这会导致request相等undefined,因此我不会将您的变量分配到顶部,执行:

var request;
var request1;

...

if(request) {...}

另外我非常确定setInterval()的第3个参数不是您希望传递给您定义的函数的参数 - 您可以这样做:

setInterval(function() {
    do_it(id);
}, 1000);

请参阅http://www.w3schools.com/jsref/met_win_setinterval.asp

答案 3 :(得分:0)

看上面的答案帮助我找到了一个很好的解决方案。这就是我所做的:

request1 = $.ajax({ 

url: "php.php?id=" + id,
success: function (result) {
    $("#result").html(result);
    do_it(id); 
} });


function do_it(id) {
        //alert(id);
        request1 = $.ajax({ 
        url: "php.php?id=" + id,
        success: function (result) {
            $("#result").html(result);
            request = setTimeout(do_it,1000,id);
            }
        });
}

虽然我仍然无法使用setTimeout('do_it('+ id +')',1000)正确传递参数; ,它对我有用。

答案 4 :(得分:0)

以下列方式使用setTimeout

    setTimeout(function(){
        do_it(id);
    }, 1000);