javascript:如何反复调用函数本身?

时间:2013-02-14 03:29:55

标签: javascript

我想反复计算时间并每隔一分钟更新一次当前时间。我的代码不起作用。 Firebug控制台表示最终的行函数getStatus()未定义。如何反复调用此函数?

jQuery(document).ready(function($){

    $(function() {   
     getStatus();
    });

    function getStatus() {
      var post_id = $('#post_id').val();
      var nonce = $('#_wpnonce').val();
      jQuery.ajax({
        url : ajaxurl,
        data : {action: "update_edit_lock", post_id : post_id, nonce: nonce },
        success: function(response) {
          if(response == "false") {
            alert("failed")
          }
          else {
            $("#message").html(response)
          }
        }
        });
      setTimeout("getStatus()",60000);
    }
    },(jQuery));

3 个答案:

答案 0 :(得分:2)

你的问题是getStatus包含在另一个回调中。要么window.getStatus = function(){},要么将代码转为:

jQuery(document).ready(function($){
    var getStatus = function() {
      var post_id = $('#post_id').val();
      var nonce = $('#_wpnonce').val();
      jQuery.ajax({
        url : ajaxurl,
        data : {action: "update_edit_lock", post_id : post_id, nonce: nonce },
        success: function(response) {
          if(response == "false") {
            alert("failed")
          }
          else {
            $("#message").html(response)
          }
        }
        });
      setTimeout(getStatus,60000);
    };

    $(function() {   
     getStatus();
    });

},(jQuery));

将字符串传递给setTimeout会使其成为eval字符串,您应该避免使用该字符串,而代码通常不需要

答案 1 :(得分:1)

您也许可以使用setInterval(getStatus, 60000),否则您应该使用setTimeout(getStatus, 60000)。不要使用字符串作为函数回调,而是使用命名函数。

答案 2 :(得分:1)

使用setInterval(function, milliseconds)

jQuery(document).ready(function ($) {
    var getStatus = function() {
        var post_id = $('#post_id').val();
        var nonce = $('#_wpnonce').val();
        jQuery.ajax({
            url: ajaxurl,
            data: {
                action: "update_edit_lock",
                post_id: post_id,
                nonce: nonce
            },
            success: function (response) {
                if (response == "false") {
                    alert("failed")
                } else {
                    $("#message").html(response)
                }
            }
        });
    }
    setInterval(getStatus, 1000);
}, (jQuery));