如何在浏览器控制台中使用jQuery AJAX记录PHP文件?

时间:2017-08-24 13:56:52

标签: javascript php ajax xmlhttprequest data-processing

我有一个PHP文件来处理数据。它由$.ajax()运行,有时在需要很长时间处理的大文件上运行。我需要在浏览器控制台中记录有关正在进行的流程的一些信息,这些信息在运行中显示,而不仅仅是在PHP文件运行完毕时。

从我做过的研究中,我发现有两个困难:

  1. 让PHP在完成之前吐出一些东西
  2. 让jQuery / JS随时随地显示
  3. 为了解决#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的解决方案,但我不熟悉这个主题,因此不确定既不寻找什么,也不确定它是什么正确的方向...

    以下是我试图运行的测试代码:

    &#13;
    &#13;
    $("#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;
    &#13;
    &#13;

    附属问题:为了让一个AJAX示例在SO片段中工作,是否有(简单)方法绕过跨源限制?

1 个答案:

答案 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访问服务器 我仍然有兴趣了解如何登录控制台