这可能是一个愚蠢的问题,但我无法轻易弄明白为什么它会这样
我有两个ajax调用函数,
execCommand() : 用于通过 php 执行 shell 命令
shell_exec('ping 127.0.0.1 > ../var/log/tmp.log');
getLog() : 用于收集 execCommand() [../var/log/tmp.log] 的日志并显示给用户 [实时阅读]
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 网络选项卡中,两个 ajax 调用都在加载,但它从不呈现日志,直到 execCommand() 完成执行。
我不知道主要原因是什么,我测试了从终端运行 ping 127.0.0.1 > ../var/log/tmp.log
然后评论 execCommand() now getLog( ) 函数每 3 秒更新一次日志文件。
最佳答案
您正在使用 session 。在服务器端, session 被锁定,因此您一次只能通过一个脚本打开 session 文件。
如果您的服务器端脚本应该是非阻塞的,那么要么不要在其中使用 session_start(),要么确保尽快使用 session_write_close() 关闭 session ,以允许其他脚本运行。
关于javascript - 如何同时运行 ajax 调用 - php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42992533/