我有一个PHP文件来处理数据。它由$.ajax()
运行,有时在需要很长时间处理的大文件上运行。我需要在浏览器控制台中记录有关正在进行的流程的一些信息,这些信息在运行中显示,而不仅仅是在PHP文件运行完毕时。
从我做过的研究中,我发现有两个困难:
为了解决#1问题,我尝试过:
echo "started"."<br>";
foreach (array("done this", "done that","had a coffee","burp") as $msg) {
sleep(3);
echo $msg."<br>";
flush();
ob_flush();
}
flush(); ob_flush();
应该可以完成这项工作,虽然你可以测试here它并没有像它预期的那样严格显示3s。是否有任何建议让它按预期显示?
关于如何处理#2,我已经探索了一个涉及XMLHttpRequest
的解决方案,但我不熟悉这个主题,因此不确定既不寻找什么,也不确定它是什么正确的方向...
以下是我试图运行的测试代码:
$("#run").click(function(e) {
$.ajax({
url: "http://constances-web-dev.vjf.inserm.fr/constances-web/ajax-test.php",
xhr: function() {
// get the native XmlHttpRequest object
var xhr = $.ajaxSettings.xhr();
xhr.addEventListener('readystatechange', function(e) {
console.log(e)
});
// set the onprogress event handler
//xhr.onprogress = function(evt){ console.log(evt.target.response) } ;
// set the onload event handler
return xhr;
},
success: function(msg) {
console.log(msg);
},
error: function(msg) {
console.log("Erreur: " + msg);
}
})
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="run">go</button>
&#13;
附属问题:为了让一个AJAX示例在SO片段中工作,是否有(简单)方法绕过跨源限制?
答案 0 :(得分:0)
作为一种解决方法我已经将日志添加到我的write2log函数
static function log2File($string, $logFileName) {
if (substr($string,0,1 ) == "\n")
exec("echo '".date('Y-m-d_H:i:s')." ".addslashes(substr($string,1))."' >> ".$logFileName,$output,$status);
else
exec("echo -n ".addslashes($string)."' >> ".$logFileName,$output,$status);
}
然后我可以tail -f
日志来观察事情的进展
但是这需要ssh访问服务器 我仍然有兴趣了解如何登录控制台