一尘不染

如何获取xmlhttp请求(AJAX)的URL

ajax

w3schools.com(url)上,有一个如何使用纯Javascript进行AJAX调用的示例。如果看一下示例,您将看到呼叫是由一个按钮触发的:

<button type="button" onclick="loadXMLDoc()">Change Content</button>

这是功能:

function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
}

我想做的是获取传出的AJAX调用的URL,即ajax_info.txt(URL):

xmlhttp.open("GET","ajax_info.txt",true);

我试图将URL置于警报中,所以我尝试使用getAllResponseHeaders()希望给我的响应来调用响应的标头Host

if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    alert(xmlhttp.getAllResponseHeaders());

它确实给了我所有标头,但没有给主机。因此,我的下一个步骤是尝试设置自己使用的主机,setRequestHeader()但随后我意识到页眉需要一个必须发送给自己的值,因此这将无法工作。我还能尝试什么方式来获取/获取警报中的传出AJAX
URL?

请注意,该代码只是一个示例,我知道由于Access-Control-Allow-Origin,禁止更改标头(在这种情况下)。


阅读 240

收藏
2020-07-26

共1个答案

一尘不染

我不确定您对代码有多少访问权,但是您可以重写XMLHttpRequest.open并在其中钩住URL。

XMLHttpRequest.prototype.open = (function(open) {
  return function(method,url,async) {
      console.log('the outgoing url is ',url);
      open.apply(this,arguments);
    };
})(XMLHttpRequest.prototype.open);

这是一块FIDDLE

2020-07-26