【发布时间】:2019-01-16 15:40:45
【问题描述】:
我们正在从多个位置和域加载脚本,其中之一是具有 jQuery.ajax 函数定义。
对 jQuery.ajax 的调用是从具有相对 URL 的不同位置和域完成的,例如 - jQuery.ajax("my/relative/url")。
这通常会向相对于调用者所在位置的 url 执行请求。
我的要求是捕获以“/my/specific”开头的特定网址并重写它们,但对于所有其他人 - 继续原样。
我所做的是在我的代码中覆盖 jQuery.ajax,检查 url,并使用原始 ajax 调用调用 apply:
jQuery.ajax = function (url) {
if (url) {
if (typeof url === "string") {
if (url.startsWith('/my/specific/url')) {
arguments[0] = url.replace('/my/specific/url', '/my/changed/url');
}
else {
arguments[0] = url;
}
}
else {
if (url.url.startsWith('/my/specific/url')) {
url.url = url.url.replace('/my/specific/url', '/my/changed/url');
}
}
}
return _fnAjaxOrig.apply(this, arguments);
};
当 relative url 被调用时,请求是相对于我的代码而不是调用者代码来的。
有什么解决办法吗?
我无法访问 jquery.ajax 的调用者,也无法访问它的定义。
【问题讨论】:
标签: javascript jquery ajax overriding relative-path