繁体   English   中英

控制器中的PHP刷新信息

[英]PHP flush information in controller

我正在尝试从PHP CodeIgniter中的控制器发送数据以进行查看。
我正在通过ajax调用PHP函数,并使用ob_flush将数据发送回去,但问题是所有刷新调用都在以后的调用中串联在一起。

例如:第一冲洗发送1第二冲洗调用发送12而不是2

这是我的控制器循环。

foreach ($csv_array as $row) {
    ob_start();
    $varint=$varint+1;
    echo $varint;
    $content = ob_get_contents();
    ob_end_clean();
    echo $content;
    ob_flush();
    flush();
    while (ob_get_level() > 0) {
        ob_end_clean();
    }
}

我的ajax调用是这样的:

document.getElementById('upld').onclick = function() {
    xhr = new XMLHttpRequest();
    var mydata = new FormData($('#form')[0]);
    xhr.open("POST", base_url+"index.php/controller/function", true);
    xhr.onprogress = function(e) {
        console.log(e.currentTarget.responseText);
    }
    xhr.onreadystatechange = function(data='') {
        if (xhr.readyState == 4) {
            console.log(myArr);
        }
    }
    xhr.send(mydata);
};

flush()文档说:

flush()可能无法覆盖Web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响。 它也不会影响PHP的用户空间输出缓冲机制。 这意味着,如果您正在使用ob_flush()和flush()来刷新ob输出缓冲区,则必须同时调用它们。

在您的情况下,您可以用ob_flush()替换flush() ,因为我不认为您要刷新系统输出缓冲区。

作为此代码的额外一点:

$content = ob_get_contents();
ob_end_clean();

可以压缩为一个函数调用,该函数调用是前面两个命令组合的别名:

$content = ob_get_clean();

ob_get_clean()文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM