2015-07-03 137 views
0

我有一個愚蠢的頁面,其中一個鏈接將觸發長時間運行任務的POST請求。所以頁面將不得不輪詢另一個端點的狀態。這裏是實際代碼:setTimeout()沒有效果

<script type=text/javascript> 
    function check_status(id) { 
    alert(id) 
    } 

    $(function() { 
    $("a#save_preview").bind('click', function() { 
     $.post($SCRIPT_ROOT + "/api/v1.0/creatives/" + 
     $("img#preview").attr("creative_id"), 
      {}, function(data, status) { 
      alert(status); 
      setTimeout(check_status(100), 8000); 
     }, "json"); 
    }); 

    }); 

因此,在POST請求成功後,應該在8秒鐘之後調用存根檢查狀態。然而,每當我運行這段代碼時,它都會在之後被調用。我做錯了什麼?

回答

3

setTimeout(check_status(100), 8000);應該是setTimeout(check_status, 8000, 100);或者可能使用匿名函數,如果您需要支持以下Internet Explorer 10如setTimeout(function(){check_status(100);}, 8000);

0

嘗試有setTimeout的 內部函數下面的代碼應該在你的情況

<script type=text/javascript> 
    function check_status(id) { 
    alert(id) 
    } 

    $(function() { 
    $("a#save_preview").bind('click', function() { 
     $.post($SCRIPT_ROOT + "/api/v1.0/creatives/" + 
     $("img#preview").attr("creative_id"), 
      {}, function(data, status) { 
      alert(status); 
      setTimeout(function(){check_status(100);}, 8000); 
     }, "json"); 
    }); 

    }); 
1

工作,你必須提供一個回調功能setTimeout方法,但不是提供,那你就直接調用它是check_status(100),所以沒有什麼事實上在超時後被調用。你可以這樣改變:

setTimeout(function() { 
    check_status(100) 
}, 8000);