抱歉,由于我缺乏词汇量,我找不到更好的标题。
我有一个PHP脚本回答2个GET参数:一个用于启动一个长进程,一个用于获取进程进程。
类似的东西:
if(isset($_GET['start_generation'])) exit($dossier->generate());
if(isset($_GET['get_status'])) exit($dossier->getStatus());
按钮正在发送第一个请求(AJAX POST),然后启动一个计时器,该计时器将使用另一个ajax请求每2秒检查一次生成状态。
目前第一个请求在生成完成之前没有结束,所以检查状态的函数将直接从0到100。
如何在调用generate()之前关闭AJAX请求? 你能告诉我输出缓冲(ob_flush()和朋友)是否可行?
由于
修改(我的ajax代码):
var lastStatus = false;
var checkDossierStatus = function(){
$.get('".$URL."&get_status', function(status){
status = parseInt(status, 10) || 0;
console.log('status '+status);
if(status === lastStatus) return false;
lastStatus = status;
var target;
var activeTitleID = 0;
switch(status){
default:
case 0:
// Show something for status 0...
break;
case 1:
// Show something for status 1... etc...
break;
}
});
};
$('.transmission-start-btn').off('click').on('click', function(e){
e.preventDefault();
$.post('".$URL."', {transmission_action: 'start'}, function(d){
checkDossierStatus();
startStatusCheck();
});
});
答案 0 :(得分:1)
您可以像这样中止或Cancle ajax请求
222.22.5.5
答案 1 :(得分:0)
对我来说,最好的解决方案是使用带有Connection:Close标头和session_write_close()的输出缓冲。
session_write_close(); # Prevent session locking so AJAX status update request will not hang.
ob_end_clean();
ob_start();
header('Content-Type: text/event-stream');
header('Connection: Close'); # Close the ajax request.
echo 'HEY'; # This will be displayed
$size = ob_get_length();
header('Content-Length: '.$size);
ob_end_flush();
flush();
LongProcess(); # Here a can finally start a long background process