簡體   English   中英

如何同時運行ajax調用 - php

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM