如何在浏览器控制台中记录使用 jQuery AJAX 运行的 PHP 文件?
Posted
技术标签:
【中文标题】如何在浏览器控制台中记录使用 jQuery AJAX 运行的 PHP 文件?【英文标题】:How to log PHP file run with jQuery AJAX in browser console? 【发布时间】:2018-02-02 10:50:00 【问题描述】:我有一个进行数据处理的 php 文件。它由$.ajax()
运行,有时处理需要很长时间才能处理的大文件。我需要在浏览器控制台中记录一些关于正在进行的进程的信息,这些信息on the go,而不仅仅是 PHP 文件完成运行时。
从我所做的研究中,我发现有两个困难:
-
让 PHP 在完成之前吐出一些东西
让 jQuery/JS 随时随地显示
为了解决 #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);
)
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="run">go</button>
附属问题:是否有一种(简单的)方法可以绕过跨域限制,以使 AJAX 示例在 SO sn-p 中工作?
【问题讨论】:
对于您的附属问题,很遗憾,答案是否。 Here 是 SO 解释。 嘿@freginold 非常感谢您的帮助!想知道为什么由于代码涉及无法运行的 ajax 而推荐使用 snipet? @freginold 也感谢 +1,据我所知,这让我获得了达到 50 所需的 5 声誉。我现在是一个大女孩,可以发表评论!太棒了! 您仍然可以查看是否生成了任何控制台消息或错误,具体取决于示例,它提供了一种更好的方式来组织代码,而不仅仅是代码块。 好的,谢谢 【参考方案1】:作为一种解决方法,我在 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 访问服务器,所以 我仍然有兴趣弄清楚如何登录到控制台
【讨论】:
以上是关于如何在浏览器控制台中记录使用 jQuery AJAX 运行的 PHP 文件?的主要内容,如果未能解决你的问题,请参考以下文章
你如何使用 jQuery Deferreds 数组? [复制]