【发布时间】: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 > ../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