如果页面未刷新,则多个ajax调用按钮单击jquery

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果页面未刷新,则多个ajax调用按钮单击jquery相关的知识,希望对你有一定的参考价值。

如果我单击“提交”按钮一次,则AJAX调用仅执行一次。太棒了。

问题是如果我不刷新页面并第二次单击“提交”按钮,则AJAX调用将执行两次。如果我第三次单击该按钮而不刷新页面,则会执行三次AJAX调用。

我的代码出了什么问题?我希望在单击“提交”按钮时只执行一次AJAX调用。

<form id="myForm">
  <div class="modal-dialog" role="document">
    <input type="hidden" name="buttonId" id="buttonId">
    <div class="modal-content">
      <div class="modal-body">
        <div class="input-group">
          <span id="commspan" class="input-group-addon">Comment</span>
          <input type="text" name="queuqOther" id="queuqOther" class="form-control">
        </div>
      </div>
      <div class="modal-footer">
        <button type="button" id="btnPause" class="btn btn-primary">Submit</button>
      </div>
    </div>
  </div>
</form>
$('#btnPause').on('click', function() {
  var form = $("#myForm");
  form.validate();
  if (form.valid()) {
    $.ajax({
      async: true,
      crossDomain: true,
      url: "http://localhost/postdata",
      xhrFields: {
        withCredentials: true
      },
      success: function(data) {
        console.log(data);
      }
    });
  }
});
答案

最简单的调整是在检查表单有效后删除侦听器:

const $btnPause = $('#btnPause');
const handler = function() {
  var form = $( "#myForm" );
  form.validate();
  if(form.valid()){
    // remove handler:
    $btnPause.off('click', handler);
    $.ajax({
      async : true,
      crossDomain: true,
      url: "http://localhost/postdata",
      xhrFields: {
        withCredentials: true
      },                            
      success: function (data) {
        console.log(data);
      }
    });
  }
};

$btnPause.on('click', handler);
另一答案

尝试使用click删除off()事件处理程序,如下所示

$('#btnPause').off('click').on('click',function() {
  var form = $( "#myForm" );
  form.validate();
  if(form.valid()){
    $.ajax({
              async : true,
              crossDomain: true,
              url: "http://localhost/postdata",

              xhrFields: {
                 withCredentials: true
                },                            
              success: function (data) {
                console.log(data);
                  }
          });
    }
});

您还可以使用one()最多执行一次事件处理程序

$('#btnPause').one('click',function() {/* your code here */});
另一答案

完成绑定后,始终取消绑定事件处理程序。例如。对.on()附加事件使用.off()。

$('#btnPause').off('click').on('click', function() {
//your Code Here
});
另一答案
const $btnPause = $('#btnPause');
const handler = function() {
  var form = $( "#myForm" );
  form.validate();
  if(form.valid()){
    // remove handler:
    $btnPause.off('click', handler);
    $.ajax({
      async : true,
      crossDomain: true,
      url: "http://localhost/postdata",
      xhrFields: {
        withCredentials: true
      },                            
      success: function (data) {
        console.log(data);
      }
    });
  }
};

$btnPause.on('click', handler);

以上是关于如果页面未刷新,则多个ajax调用按钮单击jquery的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮时未发送 Django Post 请求

当用户单击刷新时处理 ajax 错误

使用 Ajax 调用刷新 JSP 页面上的 div 而没有响应

多个使用ajax动态创建的同名按钮

Ajax 调用未从 ActiveRecord 返回最新数据

PHP:如果用户未按下提交按钮,Mysql 回滚多个查询(通过 ajax 完成)