如何在 Ajax 调用中临时禁用按钮?

How to temporarily disable a button within an Ajax call?

在我的 Javascript 代码中,我写了一个 Ajax 调用,其中几个 for loop 周期调用两个 JSON 文件;当某些事件发生并单击 Search 按钮时会调用某些函数:显示包含来自 API 请求的数据的表格。

我想在 Ajax 调用中查找这些数据时暂时禁用 Search 按钮,然后在执行操作后再次启用它,方式类似于什么发生在 setTimeout() 方法中,但无需设置毫秒数(我之前无法指定它,因为毫秒数取决于互联网连接速度和其他因素...)。

如何在回调函数中临时设置.prop("disabled", false);?换句话说,如何在 Ajax 调用中临时禁用按钮?

您可以为此使用 beforeSendcomplete

$.ajax({
    type: 'POST',
    url: url,
    data: data,
    beforeSend: function() {
        // disable your button here
        .prop("disabled", true);
    },
    success: function(data) {
        //success
    },
    error: function(xhr) { // if error occured
    },
    complete: function() {
        // enable your button here
        .prop("disabled", false);
    }
});

将对象实例注入事件处理程序。

在此处检查可能的事件处理程序:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress

而不是 Console.log 调用我们的 object.prop("disabled",false") 那里

使用 JavaScript 获取 API

<!DOCTYPE html>
<html>

<body>

  <div>
    <button type="button" id="btn1" onclick="loadData()">Change Content</button>
    <div id="response">
    </div>
  </div>

  <script>
    function loadData() {

      document.getElementById("btn1").disabled = true;

      fetch("https://jsonplaceholder.typicode.com/todos/1")
        .then((resp) => resp.text()) // Transform the response into text
        .then((data) => {
          document.getElementById("response").innerHTML =
            data;
          document.getElementById("btn1").disabled = false;
        });

    }
  </script>

</body>

</html>

使用普通的旧 javascript

<!DOCTYPE html>
<html>

<body>

  <div>
    <button type="button" id="btn1" onclick="loadData()">Change Content</button>
    <div id="response">
    </div>
  </div>

  <script>
    function loadData() {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.status == 200) {
          document.getElementById("response").innerHTML =
            this.responseText;
        }
        document.getElementById("btn1").disabled = false;
      };

      xhttp.open("GET", "https://jsonplaceholder.typicode.com/todos/1", true);
      xhttp.send();
      document.getElementById("btn1").disabled = true;
      document.getElementById("response").innerHTML = '';
    }
  </script>

</body>

</html>