通过jquery检测ajax请求

fat*_*Dev 3 ajax jquery asp.net-ajax

我正在使用asp控件,我有一些下拉列表,在选择中返回到服务器并执行一些操作(通过asp ajax)我正在寻找的是在ajax调用启动时通过jquery检测我已经尝试过以下电话:

  $.ajaxSetup({
                    beforeSend: function (jqXHR, settings) {
                        alert("ok");
                        return false;
                    }
                });
Run Code Online (Sandbox Code Playgroud)

和

also  $(document).ajaxStart(function () {
                   alert("OK");
                });
Run Code Online (Sandbox Code Playgroud)

但这一切都没有奏效

Ash*_*lam 9

好吧,如果$(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;
Run Code Online (Sandbox Code Playgroud)

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


Dek*_*kel 6

真的不推荐,但您可以使用.ajaxStart()和.ajaxComplete()处理程序:

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

重要说明从 jQuery 1.9 开始,jQuery 全局 Ajax 事件的所有处理程序都必须附加到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();
    }
});
Run Code Online (Sandbox Code Playgroud)