我们正在从多个位置和域加载脚本,其中之一是具有jQuery.ajax函数定义。
对jQuery.ajax的调用是从不同的位置和域使用相对url完成的,例如- jQuery.ajax("my/ relative /url")。
这通常会相对于调用方所在的位置执行对url的请求。
我的要求是捕获以"/ My / specific“开头的特定urls,然后重写它们,但是对于所有其他urls-按原样继续。
我所做的是在代码中覆盖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);
};
当相对 urls被称为它时,请求是相对于我的代码而不是调用者代码来的。
有什么解决办法吗?
我不能访问jquery.ajax的调用者,也不能访问它的定义。
发布于 2018-08-09 08:51:50
类型:
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";
}
}
});Note:此处指定的设置将影响对
$.ajax或基于Ajax的衍生工具(如$.get())的所有调用。这可能会导致不良行为,因为其他调用者(例如,插件)可能期待正常的默认设置。因此,我们强烈建议不要使用这个API。相反,在调用中显式设置选项,或者定义一个简单的插件来这样做。
https://stackoverflow.com/questions/51762517
复制相似问题