从其他文件夹/域覆盖jQuery.ajax-相对网址问题

时间:2018-08-09 08:44:25

标签: jquery ajax relative overrides

我们正在从多个位置和域中加载脚本,其中之一是具有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的调用者,也无法访问其定义。
谢谢,
塔尔

1 个答案:

答案 0 :(得分:0)

使用$.ajaxSetup()beforeSend回调

  

类型: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。相反,请在   调用或定义一个简单的插件即可。