2012-01-10 3 views
2

J'ai fait une requête de type interrogation longue dans une fonction utilisant kQuery ajax, qui s'exécutera tout le temps. Il y a une autre demande faite d'envoyer des données au fichier principal php et cette deuxième requête n'est pas à interrogation longue, elle envoie simplement des données à ce fichier php. Problème: J'ai examiné avec Firebug que lorsque la demande d'interrogation longue est en cours d'exécution, je ne peux pas envoyer une autre demande tant que l'interrogation longue est en cours d'exécution. Comment envoyer une autre requête même si la longue interrogation est en cours?jquery ajax demandes multiples

Remarque: J'ai utilisé async:true dans les deux.

une autre question: comment je fais en sorte que même la fonction qui contient le code de demande de longue interrogation sera appelée plusieurs fois, mais la demande à long sondages ne seront effectués que et une seule

Répondre

5

Est-ce que votre authentification basée sur la session d'utilisation de php? Votre problème peut être le verrouillage de session. Cela peut se produire dans PHP qui utilise inconditionnellement session_start() en haut de chaque requête, et est parfois un comportement par défaut dans un framework MVC même si la session n'est jamais modifiée. D'autres cas d'utilisation suspects sont si les deux scripts dépendent d'être connecté en tant qu'administrateur.

Si vous pensez que cela pourrait être le cas, essayez le placement stratégique de session_write_close() le plus tôt possible après que vous n'avez plus besoin de modifier les données de session pour vos deux scripts.

+0

oui le script php utilise la session mais il est nécessaire de l'utiliser car c'est une application de chat. –

+0

votre réponse est utile –

+0

comment puis-je faire des changements sur la variable de session après avoir utilisé 'session_write_close()'? –

0

Vous devez utiliser async : true (qui est la valeur par défaut).

Si vous dites async : false cela signifie qu'il fait un synchrone demande, à savoir, il attend la première demande de terminer avant de faire quoi que ce soit autre. Vous voulez une demande asynchrone afin que le navigateur puisse continuer à faire d'autres choses en attendant la réponse de la première requête.

(Il est rarement nécessaire pour async : false, et si vous n'êtes pas sûr que vous en avez besoin vous certainement ne pas.)

+0

désolé soit je me trompe ou quelqu'un question éditée, j'utilise async: vrai dans les deux fonctions –

+0

édité la question –

+0

OK, bien que ma réponse soit quelque peu obsolète. Si vous utilisez déjà 'async: true', alors cela devrait fonctionner - j'ai certainement déjà exécuté plusieurs requêtes ajax simultanées (et les réponses sont revenues dans un ordre différent, c'est-à-dire traitées en premier). – nnnnnn