【问题标题】:How to run ajax call simultaneously - php如何同时运行ajax调用 - php
【发布时间】:2017-03-24 06:08:19
【问题描述】:

这可能是一个愚蠢的问题,但我无法轻易弄清楚它为什么会这样

我有两个ajax调用函数,

execCommand() : 用于通过 php 执行 shell 命令

shell_exec('ping 127.0.0.1 > ../var/log/tmp.log');

getLog() : 用于收集 execCommand() [../var/log/tmp.log] 的日志并显示给用户 [live read]

echo file_get_contents(../var/log/tmp.log);

这是 jquery ajax 脚本

    $("#docker_install_fek").on("click",function(){

        $('#progress-window').show();
        getLog();
        execCommand();
    });

    function execCommand(){

        $.ajax({
            url: '<?php echo $block->getUrl('meta/reports/ajax',[]);?>',
            type: 'POST',
            data:{ip:$("#ip").val()},
            success: function(data) {
                alert(data);
            },
            error: function() {
                alert("fail");
            }
        });

    }
    function getLog() {

        $.ajax({
            type: "GET",
            url: "<?php echo $block->getUrl('meta/reports/progress',[]);?>",
            dataType: "text",
            success: function (data) {
                $("#progress-window").empty();
                $("#progress-window").append("<pre>"+data+"</pre>");
                $("#progress-window").scrollTop(1E10);
                setTimeout(getLog, 3000);
            },
            headers: {
                "Range" : "bytes=-500"
            }
        });
    }

我注意到在 firebug net 选项卡中,两个 ajax 调用都在加载,但在 execCommand() 完成执行之前它永远不会呈现日志。

我不知道主要原因是什么,我测试像从终端运行ping 127.0.0.1 &gt; ../var/log/tmp.log 然后评论 execCommand() 现在 getLog() 函数每 3 秒更新一次日志文件。

【问题讨论】:

  • 我在 wordpress 上遇到了同样的问题。希望有人回答。也在 Chrome 中。
  • 在调用shell_exec 之前,您是否尝试过使用php.net/manual/en/function.session-write-close.php
  • 这里的一个猜测是从execCommand() 中删除alert 语句。警报会阻止浏览器。 execCommand() 可能会先完成,然后警报会阻止浏览器。尝试将其替换为 console.log
  • 我删除了这个脚本中的所有警报,但问题仍然存在@31piy

标签: javascript php jquery ajax


【解决方案1】:

您正在使用会话。在服务器端,会话被锁定,因此您一次只能让一个脚本打开会话文件。

如果你的服务器端脚本应该是非阻塞的,那么要么不要在其中使用 session_start(),要么确保尽快使用 session_write_close() 关闭会话,以允许其他脚本运行。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多