jQuery ajax,在eval'd之前拦截脚本

时间:2011-04-06 16:42:06

标签: jquery

我可以拦截和修改通过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之前捕获脚本并将其包装在一个以查询字符串作为变量的闭包中。

1 个答案:

答案 0 :(得分:0)

在jQuery中进行了一些挖掘后,我找到了所需的方法。

$.ajaxSetup({
    dataFilter: function(response, type) {
        return response;
    }
});

允许您在仍处于ajax调用范围内时修改响应。