Jquery轮询请求仅在变量!='something'时

时间:2014-01-08 02:39:37

标签: javascript jquery

我有这段代码:

<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改变了。

但是,上述代码无论如何都不起作用。在值更改后,它不会开始发送请求。

我错了什么?

2 个答案:

答案 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);
    })()
});