0

ボタンのクリックを遅らせることに問題があります。私はすでに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 にプッシュし、post.php がデータをデータベースに送信します。同じ [送信] をクリックすると、プッシャー コードがトリガーされ、最終的に送信されたデータがデータベースから取り出され、接続されているすべてのユーザーにブロードキャストされます。

私が抱えている問題は、送信がデータをデータベースに送信し、データベースから同時にプルするプッシャーをトリガーすることです。75% の確率で、Submit がデータを送信する前に、プッシャー コードがデータベースからデータをプルしようとします。

考えられるあらゆる場所に setTimeout を配置しましたが、Pusher コードを遅らせることはできませんでした。助言がありますか?Submit AND Broadcast ボタンが遅れても問題ありません。[送信] をクリックすると AJAX コードまたは onclick=addMEM() が遅延する場合は問題ありません

これをとても複雑にして申し訳ありません。これは長いプロジェクトの最終ステップであり、これを機能させることができれば、ここからすべての CSS、データ入力、および数学になります。

4

1 に答える 1

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);
});
于 2013-05-19T22:18:00.763 に答える