覆盖jQuery的.load函数

Kha*_*eed 1 javascript jquery overriding

我有超过300页使用$(selector).load(path)函数的站点.现在我的客户的要求已经改变,我需要访问跨域来调用这些页面.

出于此目的,我必须在YQL的帮助下替换所有.load(函数到某些跨域函数).

是否可以覆盖我的.load函数并调用prevent default并执行我自己的代码?

Thi*_*ter 6

没有干净的方法可以做到这一点,特别是因为$.fn.load根据参数做出不同的事情并替换它会影响所有这些子功能.

但是,jQuery 支持AJAX钩子,你可以实现你想要的.

如果您只需要支持IE的XDomainRequest,请查看此插件:https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js


无论如何,如果你真的想要替换jQuery的ajax加载函数,这段代码应该这样做:

var _load = $.fn.load;
$.fn.load = function(url, params, callback) {
    if(typeof url !== "string") {
        return _load.apply(this, arguments);
    }

    // do your ajax stuff here
}
Run Code Online (Sandbox Code Playgroud)

这与jQuery用于决定是否有人想绑定onload事件或执行AJAX加载的检查完全相同.

  • 你需要`return this;`来允许方法链接. (3认同)

Den*_*ret 5

在我看来,最合理的方法是不要重载 jquery 函数,而是简单地在您最喜欢的编辑器中进行搜索和替换以替换$(xxx).load(yourpackage.load(xxx,.

即使对于 300 个 js 文件,这也可以在几分钟内完成。未来的更改将更容易,代码也将更具可读性,因为读者永远不会期望 jquery 函数执行文档中没有的操作