如何获得XMLHttpRequest的响应?

我想知道如何使用XMLHttpRequest加载远程URL的内容,并将访问的网站的HTML存储在JSvariables中。

假如我想加载并警告http://foo.com/bar.php的HTML,我该怎么做?

XMLHttpRequest.readyState等于XMLHttpRequest.onreadystatechange时,您可以通过XMLHttpRequest.responseText中的XMLHttpRequest.onreadystatechange来获取它。

这是一个例子(与IE6 / 7不兼容)。

 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == XMLHttpRequest.DONE) { alert(xhr.responseText); } } xhr.open('GET', 'http://example.com', true); xhr.send(null); 

为了更好的交叉浏览器的兼容性,不仅要IE6 / 7,而且要覆盖一些浏览器特定的内存泄漏或者错误,并且为了减less冗长的请求,你可以使用jQuery 。

 $.get('http://example.com', function(responseText) { alert(responseText); }); 

请注意,如果不在本地主机上运行,​​您必须考虑JavaScript的相同来源策略 。 您可能需要考虑在您的域中创build代理脚本。

XMLHttpRequest ,使用XMLHttpRequest.responseText可能会引发下面的exception

  Failed to read the \'responseText\' property from \'XMLHttpRequest\': The value is only accessible if the object\'s \'responseType\' is \'\' or \'text\' (was \'arraybuffer\') 

访问XHR响应的最佳方法如下

 function readBody(xhr) { var data; if (!xhr.responseType || xhr.responseType === "text") { data = xhr.responseText; } else if (xhr.responseType === "document") { data = xhr.responseXML; } else { data = xhr.response; } return data; } var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { console.log(readBody(xhr)); } } xhr.open('GET', 'http://www.google.com', true); xhr.send(null); 

我build议寻找fetch 。 这是ES5的等价物,并使用承诺。 它更可读,更容易定制。

 const url = "https://stackoverflow.com"; fetch(url) .then( response => response.text() // .json(), etc. // same as function(response) {return response.text();} ).then( html => console.log(html) );