【发布时间】:2013-08-03 17:31:38
【问题描述】:
我正在使用 iframe 方法编写文件上传脚本。在后端,上传文件后,脚本会做更多的事情。因此,只要文件上传,我就会将输出刷新到浏览器(转到 iframe),然后脚本继续。从 Chrome 控制台我可以看到浏览器已收到响应(200 OK),但是由于某种原因,浏览器仅在整个脚本完成后才呈现它,导致相当长的延迟。为什么会这样?如何让浏览器立即渲染?
我在 SO 和外部阅读了许多关于此主题的文章、博客和 Q/A,它们给了我以下提示,但它们似乎都不起作用: - 某些浏览器需要最少字节数才能开始渲染 (256/1024/4096)。 - 如果缺少结束标签,浏览器往往会在开始渲染之前等待它。 - 需要内容长度,否则浏览器可能会一直等待更多数据。
我已经涵盖了以上内容,但我还缺少其他内容吗?
Backend code:
$r = "
<!DOCTYPE html>
<head>
<title></title>
</head>
<body>
<p id='response'>$response</p>
<p>".str_repeat(".", 4096)."</p>
</body>
</html>
";
ignore_user_abort(true);
set_time_limit(0);
ob_end_clean();
ob_start();
echo $r;
header("Content-Length: ".ob_get_length());
header("Connection: close", true);
header("Content-Encoding: none");
ob_end_flush();
flush();
Frontend code:
var iframe = document.getElementById("uploaddocframe_" + aid);
var iframeobj = (iframe.contentWindow || iframe.contentDocument);
if(iframeobj.document) {
var iframedocument = iframeobj.document;
var response = iframedocument.getElementById("response").innerHTML;
if(response == "success"){
//Do something
}
else {
// Do something
}
}
【问题讨论】:
标签: php javascript browser flush