我可以拦截和修改通过ajax加载的javascript吗?
我需要能够将脚本查询字符串解析为变量,并在它们被评估之前预先添加它们。
我为jQuery 1.4做了一些代码,但这不再适用于1.5,并不是特别好。
var oHttpData = jQuery.httpData, oGlobalEval = jQuery.globalEval, evalUrl = null;
jQuery.extend({
httpData: function(xhr, type, s) {
if (type === "script")
evalUrl = s.url;
console.log(type);
console.log(s);
var data = oHttpData.apply(this, [xhr, type, s]);
evalUrl = null
return data;
},
globalEval: function(data) {
if(evalUrl != null && evalUrl.indexOf('?') !== -1) {
var matches = evalUrl.match(/.*?\?|([\w]*)([\w\+%\.]*)[^&$]/ig), str = '(function() { var ';
for (var i = 1; i < matches.length; ++i)
str += matches[i] + '\'' +
(matches[i + 1] && !(/=/g).test(matches[i + 1]) ? decodeURIComponent(matches[(i++) + 1]) : '') + '\'' +
(i != matches.length - 1 ? ',' : ';');
data = str + data + '})();';
}
oGlobalEval.apply(this, [data]);
}
});
这将在eval之前捕获脚本并将其包装在一个以查询字符串作为变量的闭包中。
答案 0 :(得分:0)
在jQuery中进行了一些挖掘后,我找到了所需的方法。
$.ajaxSetup({
dataFilter: function(response, type) {
return response;
}
});
允许您在仍处于ajax调用范围内时修改响应。