ajax返回的全局更新数据

时间:2013-12-26 23:26:55

标签: javascript jquery ajax callback

我有这样的代码:

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

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

  1. 更新数据的代码将从不同的文件加载,因此无法存储在当前的$.get函数中。
  2. 一旦某些全局函数更新了数据,$.get应该收到更新的代码,而不是原始代码
  3. 应仅为HTML数据更新数据,而不是json或任何其他类型的数据
  4. 我知道有一个全局函数可以处理ajax调用的成功:

    $(document).ajaxSuccess(function() {
      $( ".log" ).text( "Triggered ajaxSuccess handler." );
    });
    

    问题是,这个函数只接收数据,我不知道如何通过这个函数更新data

    有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我猜您可以使用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);
});

在此DEMO中,只会更改html数据。

修改

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

  

{“* text”:window.String,“text html”:true,“text json”:jQuery.parseJSON,“text xml”:jQuery.parseXML}

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

<强> EDIT2

如果您愿意,可以使用以下“durty hack”:

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

又一个DEMO

或者,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);
});

下一页Demo