Перенаправление запроса XMLHTTP - Javascript

У меня есть веб-страница, на которой слишком много контента и JavaScript. Когда страница загружается, она выполняет несколько запросов с использованием Ajax и XMLHttp для загрузки данных. Есть ли способ подключить все эти запросы и направить их на другой сервер.

Например, веб-страница получает данные из www.apple.com/data и www.mango.com/data после загрузки. Можно вставить скрипт где-нибудь на веб-странице, который автоматически изменяет любой запрос, сделанный на www.orange.com/data.

Ожидание ответа. Спасибо

простое решение, объявите один глокальный var apis = ['apple.com/data', 'mango.com/data'], затем после успешного получения данных сверху измените apis = ['orange.com/data'], ваш вызов ajax будет похож на ajax (apis)

Sphinx 02.04.2018 18:05

Если вы используете jquery, вы можете добавить глобальный обработчик к событию ajaxSend, добавить свою логику в обработчике и выполнить ajax.abort () для запросов, которые вы не хотите отправлять. api.jquery.com/ajaxsend

Anthony C 02.04.2018 18:06

@Sphink - это возможно, однако проблема в том, что веб-страница состоит из слишком большого количества URL-адресов и они динамические. Они меняются в зависимости от типа отображаемого контента. Спасибо за помощь.

Hussain Niazi 02.04.2018 18:37

@AnthonyC - дело в том, что эти запросы не должны прерываться, а перенаправляться на другой сервер. Если я прерву запрос с помощью обработчика событий ajaxSend, можно ли будет вызвать ту же функцию для запроса с другого сервера?

Hussain Niazi 02.04.2018 18:37

понял, я использую прерывание только в качестве примера. Его можно прервать, перенаправить на другой uri или даже изменить полезную нагрузку. Я могу дать более подробную информацию в ответе, если вы разрешите загрузку jQuery (или если он уже загружен).

Anthony C 02.04.2018 19:18

@AnthonyC - у меня уже загружен JQuery. Ждет вашего ответа :)

Hussain Niazi 02.04.2018 19:34

@AnthonyC - буду ждать вашего ответа. Даже если это не решит проблему, я сделаю еще один шаг вперед. :)

Hussain Niazi 02.04.2018 20:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
7
90
2

Ответы 2

Вы можете добавить глобальный обработчик к событию 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, этого мне хватит на то время.

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