jQuery ajaxComplete:有没有办法告诉哪个Javascript函数执行了ajax调用?

时间:2012-10-19 14:13:01

标签: jquery ajax

我将.ajaxComplete事件连接到这样的几个元素:

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

问题是我的脚本中有多个$.ajax调用,这些调用由各种函数调用。我不想为每个ajax调用的每个控件触发.ajaxComplete事件。从概念上讲,我正在寻找这样的东西:

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

有没有办法达到我想要的目标?

编辑:我意识到我可以检查我正在调用的服务的网址,但我不想在我的脚本中多次硬编码URL字符串。

4 个答案:

答案 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来设置默认的成功函数