我有这样的代码:
$.get( "ajax/test.html", function( data ) {
$( ".result" ).html( data );
});
我想使用一些全局方法更新 ajax 返回的数据
- 用于更新数据的代码将从不同的文件加载,因此它不能存储在当前
$.get
函数中。 - 一旦数据被某个全局函数更新,
$.get
应该收到更新的代码,而不是原始代码 - 应仅针对
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}
在我看来,它定义了从text
到html
的掩护。通常没有转换,但您可以添加自己的转换,它可以根据需要修改数据。
编辑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);
});
下一个演示。