首頁  >  文章  >  後端開發  >  為什麼我的 AJAX 請求在 PHP 中會互相阻塞?

為什麼我的 AJAX 請求在 PHP 中會互相阻塞?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-26 16:59:30222瀏覽

Why Do My AJAX Requests Block Each Other in PHP?

同時 AJAX 請求互相阻塞

在某些情況下,AJAX 請求可能不會同時運行,從而導致意外行為。當使用者遇到兩個並發 AJAX 請求的問題時,就會出現此問題,這兩個請求旨在將資料匯出到 XSLX 檔案時顯示進度。第一個請求觸發了一個冗長的 PHP 腳本,第二個請求定期檢查進度更新。

經過調查,發現第二個 AJAX 請求在執行之前等待第一個 AJAX 請求完成。此行為歸因於 PHP 中的會話阻塞。

PHP 中的會話阻塞

預設情況下,PHP 使用檔案來儲存會話資料。當會話啟動時(使用 session_start() 函數),PHP 開啟會話檔案進行寫入並鎖定它以確保獨佔存取。這種鎖定機制可以防止並發請求同時存取檔案。結果,第二個 AJAX 請求必須等待第一個 AJAX 請求完成並解鎖會話檔案才能執行。

解決方案

此問題的解決方案問題是禁用PHP 預設的基於文件的會話存儲,或者在寫入會話文件後明確關閉會話文件,釋放鎖定。

要停用基於文件的會話存儲,請將以下行新增至php.ini file:

session.save_path =

要明確關閉會話文件,請使用session_write_close() 函數:

<code class="php"><?php
    session_start();

    $_SESSION['foo'] = 'bar'; // Write data to the session

    session_write_close(); // Close the session file

    echo $_SESSION['foo']; // You can still read from the session.
?></code>

透過實現這些解決方案,您可以確保第二個AJAX 請求將同時執行與第一個一樣,讓您可以毫不拖延地追蹤進度。

以上是為什麼我的 AJAX 請求在 PHP 中會互相阻塞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn