2010-10-04 71 views
1

   我正在開發一個在CakePHP中構建並在其中使用jQuery的項目。我有一個腳本,需要通過ajax請求來調用。這個請求在數據庫中做了很多操作並花費了太多時間。在執行期間,它將它的狀態寫入一個單獨的文件中,以便我可以看到腳本執行的狀態。每次打開文件時都會寫入執行狀態,然後關閉文件,以消除文件鎖定的問題。
      0123現在,當這個腳本正在進行時,我發送了另一個ajax請求,它只是讀取該文件並在每20秒後定期獲取內容。現在的問題是,當第一個Ajax請求忙於mysql時,任何其他的服務器請求都將停止。 Mysql創建所有這些請求的進程並將此請求置於睡眠模式。我認爲它由於框架,導致每個請求框架都需要檢查數據庫。當第一個主要腳本完成所有其他請求時也會完成。
   有沒有什麼辦法可以讓我得到ajax的進展?糾正我,如果我錯了某個地方...... !!!提前致謝。如何獲取Ajax請求進度?

回答

0

我做到了。我只需要調用讀取文件的腳本並從單獨的php文件中發回數據。無需調用框架... !!!

0

如果您正在爲您的Ajax需求使用jQuery,則可能需要查看$ .ajax方法的「async」選項。按照我看到的方式,您希望根據當前正在處理的請求顯示進度。現在,這有一個缺點,它會鎖定你正在做的任何事情,但它會正確地顯示每個「線程」的進度。我不熟悉Cake,因爲我使用Kohana。 現在,mysql把某些東西放在「睡眠」上是不太可能的,它會讓它們排隊。 這裏沒有真正的「進步」,我建議使用類似$ .ajaxStart或$ .ajaxStop(無論是在jQuery中調用的),只要從服務器獲得響應,您可以隱藏進度元素。

+0

是的你是對的我只是想展示我的第一個Ajax請求的進度。這個腳本迭代超過一萬條記錄,我只是想向用戶顯示腳本正在執行的記錄。在第一次請求任何其他請求後,在mysql中創建一個進程。我通過「show processlist;」進行檢查命令在mysql中創建一個進程並將睡眠狀態置於Command列中。我已經顯示「Please wait script in progress ...」消息,但我只想向用戶顯示實際的進程狀態。 – Nehal 2010-10-04 08:34:36