通过jquery检测ajax请求

时间:2016-10-05 10:19:43

标签: jquery ajax asp.net-ajax

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

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

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

但这都不起作用

3 个答案:

答案 0 :(得分:6)

好吧,如果$(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(){});

之外

答案 1 :(得分:3)

建议,但您可以使用librato-client.ajaxStart()处理程序:

<link href="@Url.Content("~/css/bootstrap.min.css")" rel="stylesheet" />
  

重要提示从jQuery 1.9开始,jQuery全局Ajax事件的所有处理程序必须附加到$(document).ajaxStart(function() { console.log('Ajax call started'); $("#loading").show(); }); $(document).ajaxComplete(function() { console.log('Ajax call completed'); $("#loading").hide(); });

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

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

.ajaxComplete()

答案 2 :(得分:1)

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

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

如果您想绑定global eventsajaxStart之类的ajaxStop

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