我将.ajaxComplete事件连接到这样的几个元素:
$("#ElementId").ajaxComplete(function (a, b, c) { });
问题是我的脚本中有多个$.ajax
调用,这些调用由各种函数调用。我不想为每个ajax调用的每个控件触发.ajaxComplete事件。从概念上讲,我正在寻找这样的东西:
if (a.function == SearchCustomers) { do this }
有没有办法达到我想要的目标?
编辑:我意识到我可以检查我正在调用的服务的网址,但我不想在我的脚本中多次硬编码URL字符串。
答案 0 :(得分:8)
<强>更新强>
查看此演示: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') {
// ...
}
});
答案 1 :(得分:3)
你必须这样做:
$.ajax({
url: "servicecall.html",
success: function(html){
//if success
};
});
答案 2 :(得分: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
}
}
};
.then()正在工作,因为$ .ajax实现了Deferred“接口”。看到这个参考: http://api.jquery.com/category/deferred-object/
另外,考虑让代码用户能够改变传递给$ .ajax调用的选项。为此,我使用$ .extend。看到这个参考: http://api.jquery.com/jQuery.extend/
答案 3 :(得分: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
}
});
如果你有很多需要做同样事情的.ajax调用,那么你可以使用$ .ajaxSetup来设置默认的成功函数