我正在使用 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
}
}