gpt4 book ai didi

javascript - 如何同时运行 ajax 调用 - php

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:51 28 4
gpt4 key购买 nike

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

我有两个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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com