2010-01-23 2 views
1

J'ai un run.php qui a un bouton appelé "Exécuter". En cliquant dessus, jQuery $ .get() AJAX rappelle un fichier response.php sur le serveur et envoie le résultat à une fonction de rappel Javascript getResponse (sData) dans le code HTML de run.php pour l'afficher dans le navigateur. Je veux avoir des choses telles que response.php parcourt une liste de tâches, il renvoie une réponse avec la commande echo et getResponse met à jour un DIV avec ce statut quand il se déplace. Donc, disons que j'ai 5 étapes à l'intérieur de response.php, et donc 5 instructions d'écho à getResponse().Comment faire un multi-réponse asynchrone jQuery d'un script PHP Exécuter

J'ai essayé de faire fonctionner ceci, mais ce qui se passe, c'est que jQuery attend et envoie une seule réponse à la fois, plutôt que de l'envoyer avec les 5 réponses.

Quelle est la technique?

La raison pour laquelle je demande est que j'ai un script qui fait quelque chose à un tas de fichiers. La première chose à faire est un nombre de fichiers, donc cela met à jour ma barre de progression. Puis, comme il traverse les fichiers, il doit incrémenter ma barre de progression comme tous les 1000 fichiers.

+0

Avez-vous essayé d'envoyer des requêtes ajax dans une boucle? – Darmen

+0

Problème il y a que response.php prend un certain temps à courir. Il commence par compter les fichiers d'environ 300 000 fichiers. Il les lit ensuite dans une base de données. Pendant ce temps, la page Web doit mettre à jour une barre de progression. – Volomike

Répondre

1

Je pense qu'il n'y a aucun moyen de faire cet appel ajax pour avoir une réponse multiple en un seul appel ... mais ce que je pourrais suggérer est de faire une session sur php ... et à chaque étape de votre tâche, mise à jour cette session ... puis faites un autre appel ajax qui vérifie cette session si des mises à jour ont eu lieu ... s'il y a une mise à jour alors faites ce que vous avez à faire ....

+0

demandez-moi si je ne suis pas si clair ... – Reigel

+0

Vous êtes clair, c'est juste que response.php doit exécuter un processus contre 300 000 fichiers et prend beaucoup de temps à courir. Je devrais faire en sorte que response.php ne fonctionne que contre 1000 fichiers à la fois, ce qui n'est pas efficace mais ça marcherait. – Volomike

+0

Ah! Je peux l'avoir. Le fichier response.php s'exécute, mais met à jour une session var. Un autre script, check.php pourrait être utilisé pour vérifier la var session périodiquement. C'est ce que tu veux dire? – Volomike

0

Comme vous ne pouvez pas vraiment progresser avec xmlhttprequest , Je suggère que vous pouvez regarder dans d'autres façons de faire des appels AJAX. L'un d'eux est via iframe. Vous pouvez créer un iframe caché, définir ses sources sur request.php, puis vérifier périodiquement son contenu. Cela devrait être possible puisque c'est tout le même domaine et les restrictions ne s'appliquent pas. Iframe peut fonctionner car il n'est pas si différent de la fenêtre normale du navigateur, ce qui signifie qu'il applique régulièrement les données qu'il reçoit dans DOM même si la requête n'est pas encore terminée. Il peut y avoir des problèmes avec la façon dont les différents navigateurs font cela, c'est-à-dire que IE affiche du nouveau contenu seulement s'il a plus de 4K ou quelque chose comme ça. Mais il est possible de surmonter cela, j'en suis sûr. Donc, créez un nouveau iframe caché, ajoutez src attibute à votre script php, faites que ce script écrit périodiquement quelque chose au client et que le client vérifie ce qui a été écrit et le convertisse en une interface graphique brillante.

Questions connexes