javascript
  • jquery
  • 2014-01-08 55 views 0 likes 
    0

    我有这样的代码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值不是“未定义'。

    在开始时它是“undefined”,但过了一段时间后,它改变了jquery。

    但是,上述代码不能出于任何原因。值已更改后,它不会开始发送请求。

    我错了什么?

    +0

    尝试'如果(PROCESS_ID!){' –

    +0

    使用' typeof' as such'if(typeof process_id!='undefined')' – scniro

    +0

    只有当元素没有被找到时,该值才会被定义,否则它将是一个空字符串 –

    回答

    1

    您的代码将触发只有当input变化,从一开始的前2秒钟。你应该添加到调查方法的调用在你else,如此循环不破:

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

    欢呼声中,来自拉巴斯,玻利维亚

    +0

    谢谢你的作品。有没有办法等待2秒钟,然后再调用它,因为它通常会?谢谢 – Michael

    +0

    它会等待2秒钟,因为在接下来的电话它也会进入'setTimeout' :) –

    +0

    我的不好。谢谢。 – Michael

    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); 
        })() 
    }); 
    
    +0

    我不想使用setInterval。我想使用长轮询。 – Michael

    +0

    好吧,你的函数调用输入后的唯一时间是2秒。 – manta

    +0

    但是,如果我删除检查,它会每2秒检查一次。为什么支票会影响这个? – Michael

    相关问题