javascript
  • jquery
  • 2014-01-08 100 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

    相關問題