5

我有一个问题,我的项目中有几个页面,并且在我的项目中使用了很多 ajax 请求,但是现在我认为每当调用 ajax 请求时都会调用一个函数,并且每当该请求结束时会调用另一个函数。我怎样才能在全球范围内做到这一点我知道我可以把它放在每个 ajax 请求中,但我需要一个解决方案,我在一个地方做,它适用于整个项目。

$(document).read(function(){
 // Suppose this document load function is written on layout page and every page is  inherited from this page
});
4

4 回答 4

5

使用ajaxSetup,例如

$.ajaxSetup({
    beforeSend: function() {
        console.log('test');
    },
    complete: function() {
        console.log('completed');
    }
});

将为每个ajax 请求设置beforeSend处理程序。请注意,可以采取任何可以的选项。ajaxSetup$.ajax

于 2012-05-09T08:11:32.120 回答
2

您应该为您的 ajax 创建一个包装函数,然后使用该函数。这样,您就可以“集中”控制 ajax 调用。就像是:

//fast and crude way to extend jQuery
$.fn.customAjax = function(params){

    //contains defaults and predefined functions
    var defaults = {
        complete : function(){...default complete hander...},
        beforeSend : function (){...default beforeSend handler}
        ...
    }

    //merge settings
    var finalParams = $.extend({},defaults,params);

    //call ajax and return the deferred
    return $.ajax(finalParams);
}

//use it like
$.customAjax({
   url : ...,
   method : ...,
   data: ...,
   complete : function(){...} //redefining in the call will override the defaults
});
于 2012-05-09T08:07:06.333 回答
1

.ajaxStart

注册第一个 Ajax 请求开始时要调用的处理程序。

.ajax成功

附加一个在 Ajax 请求成功完成时执行的函数。

详细文档: http ://api.jquery.com/category/ajax/

于 2012-05-09T08:07:22.650 回答
0

尝试这样的事情:

$.ajax({
  url: "test.html",
  context: document.body
}).done(function() { 
   $.ajax({
     url: "anotherMethod.html",
     context: document.body
   });
});
});

这意味着每当 ajax 调用成功完成时,就会调用您想要的调用。

于 2012-05-09T08:05:13.357 回答