【问题标题】:Redirecting XMLHTTP request - Javascript重定向 XMLHTTPrequest - Javascript
【发布时间】:2018-09-11 20:44:29
【问题描述】:

我有一个包含太多内容和 javascript 的网页。当页面加载时,它使用 Ajax 和 XMLHttp 发出多个请求来加载数据。有没有办法连接所有这些请求并将它们定向到不同的服务器。

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

等待答复。谢谢

【问题讨论】:

  • 一个简单的解决方案,声明一个glocal var apis = ['apple.com/data', 'mango.com/data'],然后从上面获取数据成功后,更改apis = ['orange.com/data'],你的ajax调用就会像ajax(apis)
  • 如果你使用jquery,你可以为ajaxSend 事件添加一个全局处理程序,在处理程序中添加你自己的逻辑并对你不想发送的请求执行ajax.abort()。 api.jquery.com/ajaxsend
  • @Sphink - 这是可能的,但问题是网页包含太多网址并且它们是动态的。它们根据显示的内容类型而变化。不过感谢您的帮助。
  • @AnthonyC - 问题是这些请求不应该被中止,而是重定向到不同的服务器。如果我使用 ajaxSend 事件处理程序中止请求,是否可以调用相同的函数从不同的服务器请求?
  • 明白,我用 abort 只是一个例子。它可以中止或重定向到另一个 uri,甚至可以修改有效负载。如果您允许加载 jQuery(或者如果它已经加载),我可以在答案中提供更多详细信息。

标签: javascript ajax xmlhttprequest


【解决方案1】:

好的。所以我按照安东尼 C 的回答,它确实有效。但他的解决方案的问题在于它只适用于 Ajax 请求而不适用于 XMLHttpRequests(我不知道为什么,我是这个主题的初学者。)然而,在挖掘他创建钩子的想法时,我在这里遇到了类似的帖子 @987654321 @。该代码提供了一种为每个请求获取请求的 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 的 XMLHttpRequest 的主机名。虽然我确信还有更好的方法来编写这段代码,但由于我不是 javascript 专家,这足以满足我的时间需求。

【讨论】:

    【解决方案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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-26
      • 2011-03-16
      • 2010-09-18
      • 2021-09-07
      • 1970-01-01
      • 2011-09-25
      • 2013-09-11
      相关资源
      最近更新 更多