每次调用一个函数,处理AJAX请求并从服务器返回

时间:2012-03-15 12:03:38

标签: javascript jquery ajax

我有一个应用程序,其中有大量的ajax调用服务器。

现在我想审核来自服务器的响应(这个要求在放置ajax代码之后加速)。

所以我有一个审计响应数据的函数,唯一的问题是如何将数据发送到现在单独存在的函数。

我不想在每次ajax调用中添加用于调用函数的代码行进行费力的工作。

是否有更容易和一般的出路。不知何故,我可以检测到响应何时返回,然后处理响应。

在系统中同时使用传统的javascript方法和jquery ajax调用。 (该应用程序已经从很长一段时间内发生了变化,并且已经转手很多,所以新的东西会被添加,旧的东西永远不会被删除)

2 个答案:

答案 0 :(得分:1)

使用辅助函数包装您的ajax调用,并在整个代码中使用它。

(未经测试的)示例:

MyApp = MyApp || {
    logRequest: function _logRequest(settings, response) {
        // Log your response
    },

    ajax: function _ajax (settings) {
        var that = this;

        // Log attempt request here?      

        // Example of logging the success callback (do similar for error or complete)
        if (settings.success) {
            // A success handler is already specified
            settings.success = function (data) {
                that.logRequest(settings, data); // Log the response
                settings.success(data);  // Call the original complete handler                
            };
        } else {
            // No success handler is specified
            settings.success = function (data) {
                that.logRequest(settings, data);
            };
        }

        return jQuery.ajax(settings);
    }
};

对于我想减少样板的很多情况,我赞成这种机制。我只需要修改我自己的MyApp对象的状态(适用于应用程序命名),因此它是一种允许您在不修改其他全局对象的情况下拦截函数调用的接口。您还可以非常轻松地将此功能与其他内容交换出来,而无需在任何地方更新您的引用,这在许多其他情况下也很有用。

答案 1 :(得分:0)

使用.ajaxComplete()应该足以捕获通过jQuery发出的所有AJAX请求的onComplete事件。那不是你要的吗?

$('.ajaxRequest').click(function(event) {
    event.preventDefault();
    $.getJSON(
        '/echo/json/',
        this.id,
        function(data, textStatus, jqXHR) {
            console.log(data, textStatus, jqXHR);
        }
    );
});

// Listen to all ajax requests
$("#log").ajaxComplete(function(event, request, settings) {
    console.log(event, request, settings);
});​

查看 demo