我一直在阅读有关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";
}
?>
感谢任何帮助。感谢
答案 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);
答案 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);