[英]How to run ajax call simultaneously - php
這可能是一個愚蠢的問題,但我不能輕易弄清楚為什么它表現得像這樣
我有兩個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秒更新一次日志文件。
您正在使用會話。 在服務器端,會話被鎖定,因此您一次只能通過一個腳本打開會話文件。
如果您的服務器端腳本應該是非阻塞的,那么請不要在其中使用session_start(),或者確保盡快使用session_write_close()關閉會話,以允許其他腳本運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.