Requêtes AJAX simultanées se bloquant les unes les autres
Dans certaines situations, les requêtes AJAX peuvent ne pas s'exécuter simultanément, provoquant un comportement inattendu. Ce problème a été soulevé lorsqu'un utilisateur a rencontré un problème avec deux requêtes AJAX simultanées conçues pour afficher la progression lors de l'exportation de données vers un fichier XSLX. La première requête déclenche un long script PHP et la deuxième requête vérifie les mises à jour de progression à intervalles réguliers.
Après enquête, il a été découvert que la deuxième requête AJAX attendait la fin de la première avant de s'exécuter. Ce comportement est attribué au blocage de session en PHP.
Blocage de session en PHP
Par défaut, PHP utilise des fichiers pour stocker les données de session. Lorsqu'une session est démarrée (à l'aide de la fonction session_start()), PHP ouvre le fichier de session en écriture et le verrouille pour garantir un accès exclusif. Ce mécanisme de verrouillage empêche les requêtes concurrentes d'accéder simultanément au fichier. En conséquence, la deuxième requête AJAX a dû attendre que la première termine et déverrouille le fichier de session avant de pouvoir s'exécuter.
Solution
La solution à ce problème Le problème est de désactiver le stockage de session basé sur fichier par défaut de PHP ou de fermer explicitement le fichier de session après y avoir écrit, en libérant le verrou.
Pour désactiver le stockage de session basé sur fichier, ajoutez la ligne suivante à votre php.ini file :
session.save_path =
Pour fermer explicitement le fichier de session, utilisez la fonction 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>
En implémentant ces solutions, vous pouvez vous assurer que la deuxième requête AJAX s'exécutera simultanément avec le premier, vous permettant de suivre les progrès sans délai.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!