ajax 返回的全局更新数据



我有这样的代码:

$.get( "ajax/test.html", function( data ) {
  $( ".result" ).html( data );
});

我想使用一些全局方法更新 ajax 返回的数据

  1. 用于更新数据的代码将从不同的文件加载,因此它不能存储在当前$.get函数中。
  2. 一旦数据被某个全局函数更新,$.get应该收到更新的代码,而不是原始代码
  3. 应仅针对HTML数据更新数据,而不是 JSON 或任何其他类型的数据

我知道有一个全局函数可用于处理 ajax 调用的成功:

$(document).ajaxSuccess(function() {
  $( ".log" ).text( "Triggered ajaxSuccess handler." );
});
问题是,这个函数

只是接收数据,我不确定如何通过这个函数更新data

有什么想法吗?

我想你可以使用 ajaxSetup 函数并在这里设置过滤器,如下所示:

$.ajaxSetup({
    converters: {
        'text html': function (data) {
            console.log('haha! I've stolen your data!');
            console.log(data.substring(0,100));
            return 'no data :)';
        }
    }
});
$.get('http://fiddle.jshell.net')
.success(function(data) {
     console.log('I got:' + data);
});

在此演示中,仅更改 html 数据。

编辑

我对text html使用了过滤器(包含 2 个标识符:from 类型和to类型),因为它在 jQuery 文档中提到:

{"* 文本":窗口。String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}

在我看来,它定义了从texthtml的掩护。通常没有转换,但您可以添加自己的转换,它可以根据需要修改数据。

编辑2

如果你愿意,你可以使用以下"durty hack":

var originalFunc = $.get;
$.get = function() {
    return originalFunc.apply(window, arguments)
    .then(function(data) {
        return 'no data again :)';
    });
};

再来一个演示。

或者,按如下方式dataFilter

$.ajaxSetup({
   dataFilter: function(data) {
        //console.log(data);
        return 'sorry, guys, I lost data again';
    }
});
$.get('http://fiddle.jshell.net')
.success(function(data) {
    console.log('I got:' + data);
});

下一个演示。

最新更新