2016-02-29 76 views
1

我試圖從PHP CodeIgniter中的控制器發送數據來查看。
我打電話通過ajaxajax和使用ob_flush PHP函數發回數據,但問題是所有刷新調用連接在以後的調用。控制器中的PHP刷新信息

例如:第一次沖洗發送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); 
}; 

回答

0

flush()文件說:

的flush()可能無法覆蓋您的Web服務器的緩存模式,它有對瀏覽器中的任何客戶端緩衝沒有影響。它也不影響PHP的用戶空間輸出緩衝機制。這意味着如果使用這些緩衝區,則必須調用ob_flush()和flush()來刷新ob輸出緩衝區。

你的情況,你可以用ob_flush()取代flush(),因爲我不認爲你正在尋找沖洗系統輸出緩衝器做。

隨着一點點額外的驗證碼

$content = ob_get_contents(); 
ob_end_clean(); 

可以濃縮成一個函數調用是一個別名對於前命令的組合:

$content = ob_get_clean(); 

Documentation for ob_get_clean()

+0

大衛感謝爲了您的迴應。我已經嘗試過'ob_flush();'和'flush()',但這也沒有幫助。而當我嘗試只是'ob_flush();'根本不會將數據發送到前端 – SSMA