我有一個簡單的網頁(PHP,JS和HTML),它被顯示來說明計算正在進行中。這個計算是由純觸發的一個PHP腳本的JavaScript AJAX請求進行實際計算。 有關詳細信息,請參閱 here確定/規避AJAX請求是否超時的方法?
實際計算是什麼,沒有起到作用,所以爲了簡單起見,它只是一個sleep() - 命令。
當我在本地執行相同的代碼(瀏覽器在localhost下調用網站:linux,apache,php-mod)時,它工作正常,與睡眠時間無關。但是,當我讓它運行在不同的機器上(不是本地主機,而是Linux,Apache,php-mod)時,PHP腳本確實會運行(創建結果),但AJAX請求不會得到任何迴應,所以如果睡眠時間大於900秒,就沒有「onreadystatechange」。當睡眠時間爲< 900秒時,它也很好地工作,並且AJAX請求被正確終止(readyState == 4和狀態== 200)。
的Apache和PHP的配置更或默認少,我驗證的關鍵選項已經存在(的max_execution_time等),但沒有看起來那麼他們要麼縮短(< 1分鐘)或更大,例如爲有效這裏爲垃圾收集器(24分鐘)。
所以我很困惑什麼可能會導致這種情況。我認爲它可能與網絡有關,但我在路由器中沒有找到合適的選項。 也沒有錯誤報告在Apache日誌或在PHP(錯誤登錄到文件)。
讓AJAX請求的JavaScript在成功返回時顯示request.status,令人驚訝的是,當我在睡眠結束後在瀏覽器窗口中點擊「Esc」時,我也會顯示狀態「200」,但不會自動顯示因爲它應該這樣做。
無論如何,我希望你可以有一個想法如何規避這個問題? 也許每10分鐘左右客戶端和服務器之間的虛擬通信可能會有所訣竅,但我不知道如何最好地做到這一點,尤其是讓用戶透明,而不是干擾實際做計算/睡眠的工作。
最佳,
陰影
附:我所引用的文章是由我撰寫的,但似乎傳達了它可能與某些配置選項有關的想法,這似乎是而不是就是這種情況。這就是爲什麼我在這裏寫這篇文章,基本上要求一種方法來繞過這樣一個問題,不管它的起源。
我發現,當請求的PHP腳本實際上「返回」一些信息時,可以防止「超時」,例如,通過回聲(「。」)。當然,只有當人們能夠反覆回覆某些東西,而這些迴歸時刻之間的時間短於900秒時,這才起作用。當然,這會混淆AJAX請求的responseText,因此它可用作解決方法,但不一定是最佳解決方案。 – Shadow