2

時間のカウントを繰り返し、現在の時刻を 1 分ごとに更新したいと考えています。コードが機能しません。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));
4

3 に答える 3

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が文字列になります。これは避けるべきであり、通常はコードでは必要ありません。

于 2013-02-14T03:32:26.380 に答える
1

setInterval(getStatus, 60000)おそらく代わりに使用できますが、それ以外の場合は使用する必要がありますsetTimeout(getStatus, 60000)。関数のコールバックとして文字列を使用するのではなく、名前付き関数を使用してください。

于 2013-02-14T03:32:19.490 に答える
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));
于 2013-02-14T03:47:30.760 に答える