我有这段代码:
<script>
$(function() {
(function poll(){
setTimeout(function(){
var process_id = $("#form3_progress_process_id").val();
if(process_id != 'undefined') {
$.ajax({
type: "POST",
url: "grab.php",
data: "action=step3_progress&process_id=" + process_id,
success: function(data){
console.log("successful");
}, dataType: "json", complete: poll, timeout: 30000 });
}
}, 2000);
})()
});
</script>
<input type="hidden" id="form3_progress_process_id" value="undefined">
我想要的是,如果输入 form3_progress_process_id 的值不是“未定义”,它只会发送查询。
一开始它是“未定义”但过了一段时间后它被jquery改变了。
但是,上述代码无论如何都不起作用。在值更改后,它不会开始发送请求。
我错了什么?
答案 0 :(得分:1)
只有input
在开始的前2秒内发生变化,您的代码才会触发。您应该在else
中添加对poll方法的调用,因此循环不会中断:
$(function() {
(function poll(){
setTimeout(function(){
var process_id = $("#form3_progress_process_id").val();
if(process_id != 'undefined') {
$.ajax({
type: "POST",
url: "grab.php",
data: "action=step3_progress&process_id=" + process_id,
success: function(data){
console.log("successful");
}, dataType: "json", complete: poll, timeout: 30000 });
}else{
poll(); ////Add this!!
}
}, 2000);
})()
});
来自玻利维亚拉巴斯的欢呼声
答案 1 :(得分:0)
除非您的隐藏输入在2秒内发生变化,否则计时器不会再次触发。
更改为setInterval
setInterval(function(){
var process_id = $("#form3_progress_process_id").val();
if(process_id != 'undefined') {
$.ajax({
type: "POST",
url: "grab.php",
data: "action=step3_progress&process_id=" + process_id,
success: function(data){
console.log("successful");
}, dataType: "json", complete: poll, timeout: 30000 });
}
}, 2000);
})()
});