检测到 jquery 的 ajax 请求

detect ajax request by jquery

我正在使用 asp 控件,我有一些下拉列表,可以选择返回服务器并执行一些操作(通过 asp ajax) 我正在寻找的是通过 jquery 检测 ajax 调用何时开始 我尝试了以下调用:

  $.ajaxSetup({
                    beforeSend: function (jqXHR, settings) {
                        alert("ok");
                        return false;
                    }
                });

also  $(document).ajaxStart(function () {
                   alert("OK");
                });

但是 none 这行得通

您可以通过这种方式在 ajax 请求中显示您的 loader / waiting image

$('#loading-image').show();
$.ajax({
      url: uri,
      cache: false,
      success: function(html){
        $('.info').append(html);
      },
      complete: function(){
        $('#loading-image').hide();
      }
});

如果你想像 ajaxStartajaxStop 那样绑定 global events

$("#loading").bind("ajaxStart", function(){
    $(this).show();
}).bind("ajaxStop", function(){
    $(this).hide();
});

确实推荐,但您可以使用.ajaxStart() and .ajaxComplete()处理程序:

$(document).ajaxStart(function() {
    console.log('Ajax call started');
    $("#loading").show();
});
$(document).ajaxComplete(function() {
    console.log('Ajax call completed');
    $("#loading").hide();
});

Important note Starting with jQuery 1.9, all the handlers for the jQuery global Ajax events must be attached to document.

请记住,如果您的 ajax 调用包含 global: false,请求将忽略调用默认全局配置(这也意味着 .ajaxStart().ajaxComplete()不会调用回调。

如果您不想设置全局回调,您可以将它们专门设置为您进行的 ajax 调用:

$.ajax({
    method: "GET", // or POST
    url: "path",
    ....
    beforeSend: function() {
        console.log('Ajax call started');
        $("#loading").show();
    },
    complete: function() {
        console.log('Ajax call completed');
        $("#loading").hide();
    }
});

好吧,如果 $(document).ajaxStart(function() {}); 不适合你, 尝试一点原始 js,

var oldXHR = window.XMLHttpRequest;

function newXHR() {
    var realXHR = new oldXHR();
    realXHR.addEventListener("readystatechange", function() {
        if(realXHR.readyState==1){
            alert('server connection established');
        }
        if(realXHR.readyState==2){
            alert('request received');
        }
        if(realXHR.readyState==3){
            alert('processing request');
        }
        if(realXHR.readyState==4){
            alert('request finished and response is ready');
        }
    }, false);
    return realXHR;
}
window.XMLHttpRequest = newXHR;

它应该为您提供 ajax 请求的所有状态,并检查哪个状态适合您,然后您可以删除其余的 if 条件。你可以把它放在 $(document).ready(function(){});

之外