如何获得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) );