Es kann eine dumme Frage, aber ich kann nicht dachte, es leicht heraus, warum es wie dieseWie gleichzeitig Ajax-Aufruf laufen - php
verhält Ich habe zwei Ajax-Aufruf Funktion,
execCommand() : für Shell-Befehl durch ausführen php
shell_exec ('ping 127.0.0.1> ../var/log/tmp.log');
GETLOG(): zum Sammeln von Protokollen von execCommand() [../var/log/tmp.log] und Anzeige Benutzer [lesen Live]
Echo file_get_contents (.. /var/log/tmp.log);
Dies ist der Jquery Ajax-Skript ist
$("#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"
}
});
}
ich in Firebug net Registerkarte bemerken, beide Ajax-Aufrufe werden geladen, aber es nie das Protokoll, bis execCommand() beendet die Ausführung machen.
Ich weiß nicht, was ist der Hauptgrund, ich testen wie run ping 127.0.0.1 > ../var/log/tmp.log
von Terminal dann comment execCommand() jetzt getLog() Funktion Update-Protokolldatei alle 3 Sekunden.
Ich bin auf Wordpress das gleiche Problem konfrontiert. Hoffe, dass jemand antworten wird. Auch in Chrome. –
Haben Sie versucht, http://php.net/manual/en/function.session-write-close.php zu verwenden, bevor Sie 'shell_exec' aufrufen? – Panther
Eine Vermutung wäre, die 'alert' Anweisungen von' execCommand() 'zu entfernen. Warnungen blockieren den Browser. Es besteht die Möglichkeit, dass der Befehl 'execCommand()' zuerst abgeschlossen wird und die Warnung den Browser blockiert. Versuchen Sie es stattdessen mit 'console.log' zu ersetzen. – 31piy