jQuery ajaxComplete:有没有办法告诉哪个Javascript函数执行了ajax调用?
我有.ajaxComplete事件连接到这样的几个元素:
$("#ElementId").ajaxComplete(function (a, b, c) { });
问题是我的脚本中有多个$.ajax
调用,这些调用由各种函数调用。 我不想为每个ajax调用的每个控件触发.ajaxComplete事件。 从概念上讲,我正在寻找这样的事情:
if (a.function == SearchCustomers) { do this }
有没有办法实现我想要的东西?
编辑:我意识到我可以检查我正在调用的服务的URL,但我不想在我的脚本中多次硬编码URL字符串。
你必须这样做:
$.ajax({ url: "servicecall.html", success: function(html){ //if success }; });
更新
查看此演示: http : //jsfiddle.net/Z6Z5e/4/
您可以在.ajax()
调用中的自定义属性中指定函数标识符,并在ajaxComplete()
回调中使用该值。
例如,在进行.ajax()
调用时添加'func'
属性:
function foo() { $.ajax({ url: '/someurl', ... func: 'foo', ... }); }
然后,使用ajaxComplete()
$('#someElement').ajaxComplete(function(e, xhr, settings) { if (settings.func == 'foo') { // ... } else if (settings.func == 'bar') { // ... } });
就个人而言,我喜欢将我的模块组织在JS对象中,而不是将我的Ajax调用抽象为函数,原因有多种:
var YourModule = { Ajax: { AjaxCallOne: function() { return $.ajax({ // your options for the call }).promise(); }, AjaxCallTwo: function() { return $.ajax({ // your options for the call }).promise(); } }, Events: { OnButtonOneClick: function() { YourModule.Ajax.AjaxCallOne().then(YourModule.Events.OnAjaxCallOneReceived); }, OnButtonOneClick: function() { YourModule.Ajax.AjaxCallTwo().then(YourModule.Events.OnAjaxCallTwoReceived); }, OnAjaxCallOneReceived:function(data) { // your code }, OnAjaxCallTwoReceived: function(data) { // your code } } };
.then()正在工作,因为$ .ajax实现了Deferred“接口”。 请参阅此参考: http : //api.jquery.com/category/deferred-object/
另外,考虑让代码用户能够改变传递给$ .ajax调用的选项。 为此,我使用$ .extend。 请参阅此参考: http : //api.jquery.com/jQuery.extend/
Ajax调用一个:
$.ajax({ // set all your properties as needed url: myUrl, success: function(data) { // handle the result from THIS .ajax call } });
Ajax调用两个:
$.ajax({ // set all your properties as needed url: myotherURL, success: function(data) { // handle the result from THIS .ajax call } });
如果你有很多需要做同样事情的.ajax调用,那么你可以使用$ .ajaxSetup设置一个默认的成功函数