在执行之前拦截jQuery.ajax的'success'回调函数

时间:2012-03-09 13:05:25

标签: javascript jquery ajax callback

我已经构建了一个Web应用程序,它在许多不同的页面上大量使用了jQuery.ajax()函数。当然,每次使用jQuery.ajax()都会传递一个带有函数的配置对象,作为'success'属性的回调。

我现在遇到一种情况,如果服务器为任何给定的ajax请求返回某个错误代码,我想在多个页面上全局执行某个操作。我正在考虑通过在我的页面的标题中包含javascript来执行条件检查操作,以某种方式覆盖jQuery库的一部分,然后继续执行配置对象中传递的任何回调函数。这可能吗?我目前正在查看jQuery库的源代码,看看我是否可以这样做。

3 个答案:

答案 0 :(得分:3)

我认为您需要查看全局Ajax事件处理程序。

http://api.jquery.com/category/ajax/global-ajax-event-handlers/

答案 1 :(得分:2)

在jQuery 1.5+中,您可以通过converters的{​​{1}}选项完成此操作。通常,转换器只是转换从Web服务器接收的数据,并将其传递给成功回调,但如果需要,您可以在其中运行其他代码。

将此代码放入嵌入在您所有网页上的js文件中。

$.ajax

完整示例: http://jsfiddle.net/waltbosz/8a8fZ/

答案 2 :(得分:0)

我最终使用$.ajaxSetup以全局方式覆盖成功回调,如下所示:

$.ajaxSetup({
    beforeSend: function(xhr, options) {
        var originalSuccess = options.success
        options.success = function(data, textStatus, jqXhr) {
            // trigger some sort of event here for interested listeners
            originalSuccess.apply(this, arguments)
        }
    }
})