5

ボタンクリックイベントでphpファイルにデータを送信するajaxリクエストを作成しました。データを送信した後、ボタンをクリックしてデータを何度も送信しないように ajax リクエストを制限したいと思います。ページの更新時にのみデータを送信します(ページの読み込み時にデータを1回送信することを意味します)。そのようなリクエストを停止するにはどうすればよいですか。私のajaxコードは次のとおりです:

$(".button").click(function (e) {
    e.preventDefault();
    $.ajax({
        type: 'post',
        cache: false,
        url: 'my/ajaxrequest.php',
        data: {
            result: 'hi test data'
        },
        success: function (resp) {
            $("#result").html(resp);
        }
    });
});
4

4 に答える 4

9

.click()で置き換えるだけ.one()

これにより、複数のクリックで再度実行されるのを防ぐことができます$.ajax()

$(".button").one('click', function(e) {
  e.preventDefault();
  $.ajax({ ... });
}

ページの読み込み時にのみポストを実行する必要がある場合は、$.ajax()呼び出しをクリック ハンドラーからドキュメント準備完了関数に移動するだけです。

$(function() {
    $.ajax({
        type:  'post', 
        cache:  false ,
        url:  'my/ajaxrequest.php',
        data:  { result : 'hi test data' },
        success: function(resp) {
            $("#result").html(resp);
        } 
    });
});
于 2013-02-14T04:28:58.667 に答える
1

より深い分析は、ajax 呼び出しを 1 つの成功した応答に制限することができます (つまり、ステータス 200 でした && 探している結果が返されましたか? その場合は、このコードをsuccessXHR 関数の関数に入れることができrequestLog.sendStatus = true;ます: ajax リクエストを一度初期化できるようにしてから、この ( requestLog.sendStatus = true;) を の直後に配置します。e.preventDefault実際に ajax 呼び出しが実際に成功した応答である場合にのみ ajax 呼び出しを防止したい場合は、 を ajax オブジェクトrequestLog.sendStatus = trueの関数に配置します。success

var requestLog = {};
    requestLog.sendStatus = false;

$(".button").click(function(e) {
   e.preventDefault();
   if(requestLog.sendStatus) return;  
   /* requestLog.sendStatus = true; */
   $.ajax({
      type:  'post', 
      cache:  false ,
       url:  'my/ajaxrequest.php',
       data:  { result : 'hi test data' },
       success: function(resp) {
          $("#result").html(resp);
          requestLog.sendStatus = true;
      } 
     });
});

ページの読み込み時に一度だけ実行したいですか? これを試して:

(function() {
  $.ajax({
     type:  'post', 
     cache:  false ,
     url:  'my/ajaxrequest.php',
     data:  { result : 'hi test data' },
     success: function(resp) {
          $("#result").html(resp);
     } 
  });
}());
于 2013-02-14T04:29:10.553 に答える
0

click eventHandlerAjax 応答が成功した後、ボタンから削除する必要があります。

$("#Btn").unbind("click");

また

$.off("click", "input:button", foo);

于 2013-02-14T04:29:06.243 に答える
0

次のように変更するだけです:

$(".button").click(function(e) {
      e.preventDefault();
$(".button").unbind('click'); //unbind the bound event after one click
    $.ajax({
        type:  'post', 
       cache:  false ,
        url:  'my/ajaxrequest.php',
        data:  { result : 'hi test data' },
        success: function(resp) {
      $("#result").html(resp);

        } 

      });

    });
于 2013-02-14T04:29:58.660 に答える