У меня есть веб-страница, на которой слишком много контента и JavaScript. Когда страница загружается, она выполняет несколько запросов с использованием Ajax и XMLHttp для загрузки данных. Есть ли способ подключить все эти запросы и направить их на другой сервер.
Например, веб-страница получает данные из www.apple.com/data и www.mango.com/data после загрузки. Можно вставить скрипт где-нибудь на веб-странице, который автоматически изменяет любой запрос, сделанный на www.orange.com/data.
Ожидание ответа. Спасибо
Если вы используете jquery, вы можете добавить глобальный обработчик к событию ajaxSend, добавить свою логику в обработчике и выполнить ajax.abort () для запросов, которые вы не хотите отправлять. api.jquery.com/ajaxsend
@Sphink - это возможно, однако проблема в том, что веб-страница состоит из слишком большого количества URL-адресов и они динамические. Они меняются в зависимости от типа отображаемого контента. Спасибо за помощь.
@AnthonyC - дело в том, что эти запросы не должны прерываться, а перенаправляться на другой сервер. Если я прерву запрос с помощью обработчика событий ajaxSend, можно ли будет вызвать ту же функцию для запроса с другого сервера?
понял, я использую прерывание только в качестве примера. Его можно прервать, перенаправить на другой uri или даже изменить полезную нагрузку. Я могу дать более подробную информацию в ответе, если вы разрешите загрузку jQuery (или если он уже загружен).
@AnthonyC - у меня уже загружен JQuery. Ждет вашего ответа :)
@AnthonyC - буду ждать вашего ответа. Даже если это не решит проблему, я сделаю еще один шаг вперед. :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете добавить глобальный обработчик к событию ajaxSend, событие будет запущено прямо перед отправкой запроса ajax. Таким образом, вы можете проверить URI запроса, применить некоторую логику фильтрации, а затем перенаправить запрос, прервав оригинал и повторно отправив его. Ниже приведен пример
$(document).ajaxSend(function(e, xhr, opt) {
if (opt.url.indexOf("www.apple.com") !== -1) {
// abort the request
xhr.abort();
// change the uri to www.orange.com
opt.url = opt.url.replace("www.apple.com", "www.orange.com");
$.ajax(opt);
}
});
ОК. Итак, я последовал за ответом Энтони Си, и он действительно сработал. Но проблема с его решением в том, что оно работает только с запросами Ajax, а не с XMLHttpRequests (я не уверен, почему, я новичок в этой теме). Однако, копаясь в его идее создания ловушки, я наткнулся на похожий пост здесь Как получить URL-адрес xmlhttp-запроса (AJAX). Код предоставил способ получить запрошенный URL-адрес для каждого запроса. Итак, немного изменив код, мне удалось придумать следующее:
XMLHttpRequest.prototype.open = (function(open) {
return function(method,url,async) {
var uri=getLocation(url);// use get location function to convert requested url string into readable url
if (uri.hostname! = "orange.com"){
url = "https://orange.com" + url;
}
open.apply(this,arguments);
};
})(XMLHttpRequest.prototype.open);
var getLocation = function(href) {
var l = document.createElement("a");
l.href = href;
return l;
};
Этот код в верхней части страницы позволяет мне изменить имя хоста для всех запросов XMLHttpRequests, которые не направлены на orange.com. Хотя я уверен, что есть и лучшие способы написать этот код, но, поскольку я не являюсь экспертом по javascript, этого мне хватит на то время.
простое решение, объявите один глокальный
var apis = ['apple.com/data', 'mango.com/data'], затем после успешного получения данных сверху изменитеapis = ['orange.com/data'], ваш вызов ajax будет похож на ajax (apis)