我们正在从多个位置和域中加载脚本,其中之一是具有jQuery.ajax函数定义。
对jQuery.ajax的调用是通过具有相对URL的不同位置和域完成的,例如jQuery.ajax(“ my / relative / url”)。
通常会执行相对于调用者所在位置的url请求。
我的要求是捕获以“ / my / specific”开头的特定URL并重写它们,但对于所有其他URL,请按原样继续。
我所做的就是在代码中覆盖了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);
};
调用相对网址时,请求是相对于我的代码而不是调用者代码的。
有什么解决办法吗?
我无法访问jquery.ajax的调用者,也无法访问其定义。
谢谢,
塔尔
答案 0 :(得分:0)
类型:
Function( jqXHR jqXHR, PlainObject settings )
请求前回调函数,可用于修改jqXHR (在jQuery 1.4.x中,XMLHTTPRequest)对象发送之前。用这个 设置自定义标头等。jqXHR和设置对象被传递 作为参数。这是一个Ajax事件。在
false
中返回beforeSend
功能将取消请求。
$.ajaxSetup({
beforeSend: function(jqXhr, options) {
if (options.url.startsWith("/your/url")) {
options.url = "/another/url";
}
}
});
注意:此处指定的设置将影响对
$.ajax
或 基于Ajax的派生词,例如$.get()
。这会导致不良后果 行为,因为其他调用者(例如插件)可能正在等待 正常的默认设置。因此,我们强烈建议 反对使用此API。相反,请在 调用或定义一个简单的插件即可。