2012-10-19 108 views
1

我有.ajaxComplete事件有线多达这样几个要素:jQuery ajaxComplete:有没有办法告诉哪个Javascript函数执行ajax调用?

$("#ElementId").ajaxComplete(function (a, b, c) { });

的问题是,我有我的剧本多$.ajax调用由各种功能调用。我不希望为每个Ajax调用的每个控件触发.ajaxComplete事件。从概念上讲,我期待这样的事情:

if (a.function == SearchCustomers) { do this }

有什么办法达到我想要的吗?

编辑:我意识到我可以检查我打电话的服务的URL,但我不想在我的脚本中多次编写一个URL字符串。

+2

呀,不使用'.ajaxComplete '全球,而不是每个呼叫附加一个完整的功能。 –

+0

...或者'成功'在$ .ajax而不是'complete'中。一致的命名将非常简单! –

+0

你的情况很简单,'success'属性显然是你应该使用的,但是如果你有一种情况需要'ajaxComplete'来完成你在问题中陈述的方式,请看看我的发布。 – techfoobar

回答

3

你要做这样说:

$.ajax({ 
    url: "servicecall.html", 
    success: function(html){ 
     //if success 
    }; 
}); 
+0

我的大脑被炸了。我已经在使用成功了,somwehow并没有想到在我成功使用的那个函数结束时打电话给我的其他功能。谢谢! – oscilatingcretin

2

个人而言,我喜欢在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  
     } 
    }    
};​​​ 

。那么()正在工作,因为$ .ajax实现了延迟“接口”。请参阅此参考: http://api.jquery.com/category/deferred-object/

此外,请考虑让代码用户能够更改传递到$ .ajax调用中的选项。为此,我使用$ .extend。看到这个参考: http://api.jquery.com/jQuery.extend/

1

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 
    } 
}); 

如果你有很多需要做同样的事情。阿贾克斯的电话,然后您可以使用$ .ajaxSetup设置默认成功功能

7

更新

检查这个演示:http://jsfiddle.net/Z6Z5e/4/


您可以在.ajax()调用指定的自定义属性的功能标识,并使用该值在ajaxComplete()回调。

例如,添加'func'特性,同时使您的通话.ajax()

function foo() { 
    $.ajax({ 
     url: '/someurl', 
     ... 
     func: 'foo', 
     ... 
    }); 
} 

,然后使用该值从ajaxComplete()

$('#someElement').ajaxComplete(function(e, xhr, settings) { 
    if (settings.func == 'foo') { 
     // ... 
    } 
    else if (settings.func == 'bar') { 
     // ... 
    } 
}); 
相关问题