Javascript Webkit中未更新XMLHTTP readyState 3
这个问题在这些论坛上被问了两次,但给出的答案对我来说并不适用 问题是我有一个JSP页面,它返回并刷新了少量的输出 我使用以下代码读取输出:Javascript Webkit中未更新XMLHTTP readyState 3,javascript,ajax,webkit,xmlhttprequest,Javascript,Ajax,Webkit,Xmlhttprequest,这个问题在这些论坛上被问了两次,但给出的答案对我来说并不适用 问题是我有一个JSP页面,它返回并刷新了少量的输出 我使用以下代码读取输出: var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = fun
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 3) {
alert(xmlhttp.responseText);
}
}
xmlhttp.open("POST", "download.jsp", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader('X-Requested-With', "XMLHttpRequest");
xmlhttp.send($('#submitDownloadForm').serialize());
在Firefox上,这很好,在整个过程中,我收到了3个警报
然而,在基于Webkit的浏览器(如Chrome和Safari)上,我收到了第一个警报,但在流程完成之前,不会收到另外两个警报
其他答案说更改内容类型:text/plain或Content-Type:application/octet-stream,但如果我这样做,readyState会直接跳到4,就好像过程立即完成一样
我找不到任何解决办法
非常感谢您的帮助,提前感谢大家。我在JSP文件生成输出之前添加了以下代码,这解决了基于Webkit的浏览器上的问题:
response.setContentType("application/octet-stream");
现在,每次刷新输出时,我都会得到更新。不确定它是否有效,但您是否尝试过xhr.onprogress事件?@passwayr谢谢您的评论,但同样的问题仍然存在。还有其他想法吗?但在你的问题中,你说这将导致readyState直接跳到4…事实上,正是在这里我放置了set-content头,在我将其放入Ajax请求之前。