Pourquoi mes requêtes AJAX se bloquent-elles en PHP ?

Mary-Kate Olsen
Libérer: 2024-10-26 16:59:30
original
221 Les gens l'ont consulté

Why Do My AJAX Requests Block Each Other in PHP?

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 =
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!