我有一个问题,我的项目中有几个页面,我在项目中使用了很多ajax请求,但现在我认为无论何时调用ajax请求,都会调用一个函数,并且每当该请求结束另一个函数时将会通知。我怎么能在全球范围内做到这一点我知道我可以把它放在每个ajax请求中,但我需要一个解决方案,我在一个地方做,它在整个项目中都有效。
$(document).read(function(){
// Suppose this document load function is written on layout page and every page is inherited from this page
});
答案 0 :(得分:5)
使用ajaxSetup,例如
$.ajaxSetup({
beforeSend: function() {
console.log('test');
},
complete: function() {
console.log('completed');
}
});
将为每个 ajax请求设置beforeSend
处理程序。请注意,ajaxSetup
可以采用$.ajax
可以选择的任何选项。
答案 1 :(得分: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
});
答案 2 :(得分:1)
.ajaxStart
注册第一个Ajax请求开始时要调用的处理程序。
.ajaxSucess
在Ajax请求成功完成时附加要执行的函数。
for Detail doc: http://api.jquery.com/category/ajax/
答案 3 :(得分:0)
尝试这样的事情:
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
$.ajax({
url: "anotherMethod.html",
context: document.body
});
});
});
这意味着无论何时ajax呼叫成功呼叫你的欲望呼叫。