在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:
getAllResponseHeaders()
Host
if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; alert(xmlhttp.getAllResponseHeaders());
它确实给了我所有标头,但没有给主机。因此,我的下一个步骤是尝试设置自己使用的主机,setRequestHeader()但随后我意识到页眉需要一个必须发送给自己的值,因此这将无法工作。我还能尝试什么方式来获取/获取警报中的传出AJAX URL?
setRequestHeader()
请注意,该代码只是一个示例,我知道由于Access-Control-Allow-Origin,禁止更改标头(在这种情况下)。
我不确定您对代码有多少访问权,但是您可以重写XMLHttpRequest.open并在其中钩住URL。
XMLHttpRequest.open
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。