使用setTimeout延迟Javascript按钮onClick

时间:2013-05-19 21:49:40

标签: javascript jquery pusher

我在延迟点击按钮时遇到问题。我已经搜索了stackoverflow并且我已经找到了几个答案,并且使用setTimeout很容易,但是我无法让它在我正在处理的工作中运行。以下是代码示例:

AJAX在提交按钮单击

时将数据提交到数据库
<script>
  $(function () {
    $('form').on('submit', function (e) {
      $.ajax({
        type: 'post',
        url: 'post.php',
        data: $('form').serialize(),
      });
      e.preventDefault();
    });
  });
</script>

推送代码

<script>
    $(function() {

    var pusher = new Pusher('pusher')
    var activityChannel = pusher.subscribe('stream');
    var activityMonitor = new PusherActivityStreamer(activityChannel, "#current");

    var examples = new ExampleActivities(activityMonitor, pusher);

    $("#broadcast").click(function(){
        activityMonitor.sendActivity('broadcast');
    });
    $("#submit").click(function(){
        activityMonitor.sendActivity('submit');
    });
    });
</script>

HTML按钮

<input id="submit" name="submit" type="submit" value="Submit" onclick="addMEM()"><br>
<button id="broadcast">Broadcast</button>

提交按钮上的onclick =“addMEM()”用于另一个脚本。这是一个非常繁忙的按钮。

所以正在发生的事情是我单击Submit并且ajax脚本将数据推送到post.php,后者将其提交到数据库。使用相同的提交单击,将触发推送代码,最终将提交的数据从数据库中拉回并将其广播给已连接的所有人。

我遇到的问题是提交将数据提交到数据库,它会触发同时从数据库中提取的Pusher。 75%的时间推送代码在提交提交数据之前尝试从数据库中提取数据。

我将setTimeout放在我能想到的任何地方,并且无法延迟Pusher代码。有什么建议?如果提交和广播按钮被延迟,则可以。如果单击Submit延迟AJAX代码或onclick = addMEM()

,则表示不正常

很抱歉这么复杂。这是一个长项目的最后一步,如果我可以使用它,那么它就是所有的CSS,数据输入和数学。

1 个答案:

答案 0 :(得分:2)

我建议将成功回调传递给 jQuery.ajax 方法,该方法会触发广播,如下所示:

$.ajax({
  type: 'post',
  url: 'post.php',
  data: $('form').serialize(),
  success: function () {
    activityMonitor && activityMonitor.sendActivity('broadcast');
  }
});

使用setTimeout的解决方案如下所示:

$("#broadcast").click(function(){
    setTimeout(function () { activityMonitor.sendActivity('broadcast') }, 2000);
});