Переопределить jQuery.ajax из другой папки / домена - проблема с относительным URL

Мы загружаем скрипты из нескольких мест и доменов, один из которых имеет определение функции jQuery.ajax.
Вызов jQuery.ajax осуществляется из разных мест и доменов с относительными URL-адресами, пример - jQuery.ajax("my/lative/url").
Обычно это выполняет запрос к URL относительно того, где находится вызывающая сторона.
Мое требование - перехватить конкретные URL-адреса, начинающиеся с "/my/specific", и переписать их, а для всех остальных - продолжить как есть.
Что я сделал, так это переписал jQuery.ajax в моем коде, проверил url и вызвал apply с оригинальным вызовом ajax:

            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);
            };

Когда относительные URL-адреса называются, запросы приходят относительно моего кода, а не кода вызывающего.
Любое решение этого?
У меня нет доступа ни к вызывающим jquery.ajax, ни к его определению.
Спасибо,
Tal

1 ответ

Использование $.ajaxSetup() и beforeSend Перезвоните

Тип: Function( jqXHR jqXHR, PlainObject settings )

Функция обратного вызова перед запросом, которую можно использовать для изменения объекта jqXHR (в jQuery 1.4.x, XMLHTTPRequest) перед его отправкой. Используйте это для установки пользовательских заголовков и т. Д. Объекты jqXHR и settings передаются в качестве аргументов. Это Ajax Event. возврате false в beforeSend Функция отменит запрос.

$.ajaxSetup({
  beforeSend: function(jqXhr, options) {
    if (options.url.startsWith("/your/url")) {
      options.url = "/another/url";
    }
  }
});

Примечание. Указанные здесь настройки влияют на все вызовы $.ajax или производные на основе Ajax, такие как $.get(), Это может вызвать нежелательное поведение, так как другие вызывающие абоненты (например, плагины) могут ожидать нормальных настроек по умолчанию. По этой причине мы настоятельно рекомендуем не использовать этот API. Вместо этого установите параметры явно в вызове или определите простой плагин для этого.

Другие вопросы по тегам