1

我想在执行ajax成功回调之前拦截和修改来自服务器的数据

我有这个代码:

    jquery.ajaxPrefilter(function (options, originalOptions, jqXHR) {
        // Modify options, control originalOptions, store jqXHR, etc
    });

并想要等价物:

    jquery.ajaxPostfilter(function (dataComingFromServer) {

        dataComingFromServer.applyMyModifications();
    });

虽然 ajaxPostfilter 不存在 - 是否有另一种方法可以在服务器响应到达事件处理程序之前拦截它:

这个问题与这个问题有关 - 但没有回答: 如何在事件处理程序之前拦截 jQuery 中的 ajax 响应?

4

2 回答 2

1

如果您想在特定回调之前使用标准化函数修改数据,可以使用如下模式:

// Boilerplate to modify your data
function preprocess(data){
    data.foo = "bar";
    return data;
}

// Your specific handlers
function logdata(data){
    console.log(data);
}
function writedata(data){
    document.write(data);
}

// AJAX requests
$('#foo').load('url1', function(data) {
    logdata(preprocess(data));
});
$('#bar').load('url2', function(data) {
    writedata(preprocess(data));
});

当然,这可以烘焙成一种将传统的 包裹起来的方法,.ajax使用起来更方便。

请注意,dataFilterKevinB 指出的选项具有类似的目的,但仅限于.ajax方法。如果你想为 AJAX 请求设置一个全局过滤器,你可以使用:

$.ajaxSetup({
    dataFilter: preprocess
});
于 2013-01-04T21:17:08.697 回答
1

如果要在事件处理程序之前处理从服务器返回的数据,请使用 datafilter:

jquery.ajaxSetup({
    dataFilter: function (data, type) {
        //modify the data

        return data;
    }
});
于 2016-04-11T13:40:38.830 回答