1

我将 .ajaxComplete 事件连接到如下几个元素:

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

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

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

有什么办法可以在这里实现我想要的吗?

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

4

4 回答 4

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') {
        // ...
    }
});
于 2012-10-19T14:35:09.110 回答
3

你必须这样做:

$.ajax({
    url: "servicecall.html",
    success: function(html){
        //if success
    };
});
于 2012-10-19T14:27:41.393 回答
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 实现了延迟的“接口”。请参阅此参考: http ://api.jquery.com/category/deferred-object/

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

于 2012-10-19T14:28:06.573 回答
1

阿贾克斯调用一:

$.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 来设置一个默认的成功函数

于 2012-10-19T14:29:56.627 回答