【发布时间】: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 声誉。我现在是一个大女孩,可以发表评论!太棒了!
-
您仍然可以查看是否生成了任何控制台消息或错误,具体取决于示例,它提供了一种更好的方式来组织代码,而不仅仅是代码块。
-
好的,谢谢
标签: javascript php ajax xmlhttprequest data-processing