session_start();
if(isset($_GET['progress'])){
$status_done = '0';
if($_SESSION['progress_percentage'] == "100"){
$status_done = '1';
}
echo json_encode(array(
'progress_percentage' => $_SESSION['progress_percentage'],
'progress_status' => $_SESSION['progress_status'],
'progress_done' => $status_done
)
);
}
elseif(isset($_GET['dummytask'])){
for ($i = 1; $i <= 100; $i++) {
$_SESSION['progress_percentage'] = $i;
$_SESSION['progress_status'] = 'Checking the locks and stuffing the dolls!';
sleep(1);
}
}
$(document).ready(function(){
var timeout = '';
function checkProgress(){
console.log('Checking progress event started');
$.ajax({
url: 'http://willetu54.fiftyfour.axc.nl/dgi/ajax.php?progress&time='+ new Date().getTime(),
cache: false,
dataType: 'json'
}).done(function(data) {
$('#progressbar-progress').html(data.progress_status +'('+ data.progress_percentage +')');
console.log('Progress checked');
console.log(data);
if(data.progress_done == "1"){
clearTimeout(timeout);
}
}).fail(function(jqXHR, status, error){
console.log('Check Progress: Error: '+ error + status +'');
});
}
function checkProgressTimeout(){
checkProgress();
console.log('Timeout tick for progress');
timeout = setTimeout(checkProgressTimeout, 500);
}
$('#menu-open').click(function(event){
checkProgressTimeout();
console.log('starting dummy task');
event.preventDefault();
$.get('http://willetu54.fiftyfour.axc.nl/dgi/ajax.php?dummytask', function(data) {
alert('Load was performed.');
});
});
});
您好再次#1!檢查PHP腳本的進步與AJAX
我目前正在開發的系統的腳本運行速度很慢,有時可能會持續20秒。 (創建大量文件夾,移動大量文件等)。這就是爲什麼我設計了這個腳本。我創建了一個只需要持續〜100秒的小型dummytask。當我使用AJAX觸發該腳本時,它完成了一定數量的任務。每當任務完成時,我用腳本的進度更新我的$_SESSION
變量,並用另一個jQuery腳本將它加載到我的頁面上。
但它有點奇怪。我認爲它確實啓動了checkProgressTimeout
和虛擬任務(使用checkProgressTimeout
函數每500毫秒檢查一次進度),但是當我查看控制檯時,我發現它只觸發事件但沒有得到任何結果,直到虛擬任務完成然後它用相同的timeval(500ms)慢速返回進度檢查。
Google Chrome中會出現此問題。該腳本在IE中完全不起作用。
我建立了一個jsFiddle:http://jsfiddle.net/nZAs4/2/。但由於jsFiddle不支持PHP腳本,我已經有權將其自己上傳到我自己的虛擬主機之一。 (我也允許訪問控制允許來源)。
那麼我該如何得到這個工作?
'$ status_done = '0';'所以你添加字符串'0'這是毫無整數! 'String + String = StringString'。 'parseInt(StringString)= NaN(不是數字)' –
您的會話數據只有在腳本完成時纔可用。你應該考慮更新數據庫,並關閉會話進行寫入以允許另一個腳本同時運行'session_write_close()'http://php.net/manual/en/function.session-write-close.php – Waygood
@Bondye Can你解釋一下嗎?我沒有跟着。 – Thew