【问题标题】:Browser isn't rendering ob_flush output immediately浏览器没有立即呈现 ob_flush 输出
【发布时间】: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


    【解决方案1】:

    在您的 PHP 代码中,添加内容类型标头:

    header( 'Content-type: text/html; charset=utf-8' );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多