1

我有一个在 300 多个页面中使用 $(selector).load(path) 函数的网站。现在我的客户的需求发生了变化,我需要访问跨域来调用这些页面。

为此,我必须在 YQL 的帮助下将所有 .load( 函数替换为某个跨域函数。

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

4

3 回答 3

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
}

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

于 2012-06-22T09:47:39.513 回答
4

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

即使在 300 个 js 文件上也可以在几分钟内完成。未来的更改将更容易,代码将更具可读性,因为读者永远不会期望 jquery 函数做一些不在文档中的事情

于 2012-06-22T09:50:35.147 回答
2

是的,有可能:

$.fn.load = yourFunc;

推荐吗?我想不是。

于 2012-06-22T09:46:50.507 回答