重定向XMLHTTP请求 - Javascript

时间:2018-04-02 16:02:10

标签: javascript ajax xmlhttprequest

我的网页内容和javascript太多了。当页面加载时,它会使用Ajax和XMLHttp来加载数据。有没有办法挂钩所有这些请求并将它们指向不同的服务器。

例如,网页在加载后从 www.apple.com/data www.mango.com/data 中提取数据。是否可以在网页的某处插入脚本,自动更改对 www.orange.com/data 的任何请求。

等待回答。感谢

2 个答案:

答案 0 :(得分:1)

您可以向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);
    }
});

答案 1 :(得分:0)

确定。所以我跟着Anthony C的回答,确实有效。但他的解决方案的问题在于它只适用于Ajax请求而不是XMLHttpRequests(我不知道为什么,我是这个主题的初学者。)然而,挖掘他创建一个钩子的想法我在这里遇到了类似的帖子{{ 3}}。该代码提供了一种获取每个请求的请求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;
};

此页面顶部的代码允许我更改未定向到orange.com的所有XMLHttpRequests的主机名。虽然我确信有更好的方法来编写这段代码,但由于我不是javascript的专家,这足以满足我对时间的需求。