我對運行相當長時間(1秒到3分鐘之間)的PHP腳本執行jQuery Ajax調用。它不斷在數據庫中記錄完成百分比。我怎樣才能不斷地運行另一個Ajax請求來向用戶報告從MySQL數據庫中完成的百分比?使用Ajax顯示由另一個Ajax請求調用的PHP腳本的進度
編輯 我知道如何使用一個單獨的PHP腳本來查詢數據庫,所以我的問題是更多的如何設置的JavaScript和Ajax調用
我對運行相當長時間(1秒到3分鐘之間)的PHP腳本執行jQuery Ajax調用。它不斷在數據庫中記錄完成百分比。我怎樣才能不斷地運行另一個Ajax請求來向用戶報告從MySQL數據庫中完成的百分比?使用Ajax顯示由另一個Ajax請求調用的PHP腳本的進度
編輯 我知道如何使用一個單獨的PHP腳本來查詢數據庫,所以我的問題是更多的如何設置的JavaScript和Ajax調用
後您的AJAX調用脫掉你的過程,你可以讓另一AJAX調用在一個循環請求,退貨,並呈現當前完成百分比,直至達到100%。基本上,一個AJAX調用來啓動該進程,然後進行一系列檢查狀態的調用。
更新:下面是一些簡單的JavaScript來實現你想要的:
<script>
function startProcess() {
//start your long-running process
$.ajax(
{
type: 'GET',
url: "/longRunningProcess",
async: true,
success:
function (data) {
//do something - your long process is finished
}
});
}
function getStatus() {
//check your progress
$.ajax(
{
type: 'GET',
url: "/checkProgress",
async: true,
success:
function (data) {
//assume the data returned in the percentage complete
var percentage = parseInt(data);
//write your status somewhere, like a jQuery progress bar?
if (percentage < 100) {
//if not complete, check again
getStatus();
}
}
});
}
這是什麼樣的循環?它會在Ajax循環(調用正在監控的PHP腳本)中的一個while循環(繼續運行進度調用運行)中發生Ajax循環(進度調用)嗎? – user1114864
我已經添加了一些示例代碼來向你展示我的意思。基本上,通過Ajax啓動進程,檢查來自另一個Ajax調用的狀態,並保持調用,直到狀態完成。 –
除非我誤會,否則這將不會與會話一起工作,因爲第二個PHP腳本將無法打開會話......所以您的檢查進度應該具有檢查狀態而不打開會話的所有需求。 – Salketer
你可能會需要另一個URL來調用該民意調查從數據庫中取得進展。 換句話說,一個不同的PHP腳本報告進度。 Ajax調用可能會使用超時或jQuery必須定期調度自己的任何花哨的東西(直到服務器調用報告完成)。
記住要處理特殊情況下的服務器端處理死亡(因而無法完成!)
嗯,現在想想,你可能想使用exec來運行實際的長時間運行的進程,並立即返回結果第一次阿賈克斯呼叫。請記住,您的瀏覽器可能會限制優秀的Ajax調用到同一個域到兩個... – demaniak
你可能會考慮[Gearman的(http://php.net/manual/en/gearman.examples- reverse-bg.php)作爲後臺進程的替代方案。它還提供了一個工作進度界面,所以你不需要這個MySQL數據庫:[GearmanJob :: sendStatus()](http://php.net/manual/en/gearmanjob.sendstatus.php)和[ GearmanClient :: jobStatus()](http://php.net/manual/en/gearmanclient.jobstatus.php) –