我有一个在 300 多个页面中使用 $(selector).load(path) 函数的网站。现在我的客户的需求发生了变化,我需要访问跨域来调用这些页面。
为此,我必须在 YQL 的帮助下将所有 .load( 函数替换为某个跨域函数。
是否可以覆盖我的 .load 函数并调用 prevent default 并执行我自己的代码?
我有一个在 300 多个页面中使用 $(selector).load(path) 函数的网站。现在我的客户的需求发生了变化,我需要访问跨域来调用这些页面。
为此,我必须在 YQL 的帮助下将所有 .load( 函数替换为某个跨域函数。
是否可以覆盖我的 .load 函数并调用 prevent default 并执行我自己的代码?
没有干净的方法可以做到这一点,特别是因为$.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 加载的检查完全相同。
在我看来,最合理的方法是不要重载 jquery 函数,而只需在您喜欢的编辑器中进行搜索和替换以替换$(xxx).load(
为yourpackage.load(xxx,
.
即使在 300 个 js 文件上也可以在几分钟内完成。未来的更改将更容易,代码将更具可读性,因为读者永远不会期望 jquery 函数做一些不在文档中的事情。
是的,有可能:
$.fn.load = yourFunc;
推荐吗?我想不是。