XmlHttpRequest asynchrone ou non? Comment optimiser son utilisation?
Utiliser Ajax pour un outil comparateur.
Forum
29-09-2007 17:50:21
paulux1
Bonjour,
Je souhaite réaliser un outil comparateur. Travaillant en PHP/Linux, aucune fonction actuelle ne semble me permettre de le faire. J'ai alors bien sûr penser à utiliser la fameuse fonction XMLhttprequest d'AJAX.
J'ai donc actuellement un code qui s'articule comme ceci :
1- Je lance une série de requêtes de la manière suivante :
<?Php $parameters="Param1=$Param1&Param2=$Param2"; For ($x=1;$x<=count($TabProcess);$x++){ ?> <script type="text/javascript"> new Ajax_request('<?Php echo 'Operateur/'.$TabProcess[$x].'.php'; ?>',{ method:'get', params:'<?Php echo $parameters; ?>', onSuccess:MyMess, async : true }); </script> <?Php }2- Je récupère un DIV (MyMess) qui s'affiche dans ma page. Deux constatations ( elles sont peut-être liés) : - Il semble que le traitement ne soit pas réellement asynchrone. En effet quelque soit l'ordre d'origine de mon tableau $TabProcess les exécutions semblent bien être séquentielles. - Le div est constitué de la concaténation des résultats précédent. Les images ne semble pas avoir le temps de se charger pour s'afficher. ( Il s'agit de petits logos en gif de 100 x 25 px issus d'une base locale) Les logos ne s'affichent clairement que lorsque le dernier process est terminé. Pour l'exécution de mon dev j'utilise la classe de « [url]http://files.codes-sources.com/fichier.aspx?id=39686&f=ajax_lib.js&lang=en[/url] » proposée sur la toile. Question : Est-ce que cette classe n'est pas tout à fait appropriée à ce que je veux faire ? ou bien dois-je l'utiliser autrement ? Avez-vous solutions autres ? Merci pour vos réponses,
30-09-2007 16:37:08
webmaster
Vous n'avez aucune garantie quand à l'ordre de traitement avec ce code, le serveur ne traite pas forcément les requêtes dans l'ordre ou il les reçoit et je ne vois pas de fonction de traitement par lot dans ce script.
Il y a dans le framework [url=http://www.anaa.eu]www.anaa.eu[/url] (un petit framework simple), une fonction de chaînage de requête qui fonctionne sur deux niveaux (par exemple POST suivi de GET) que l'on peut combiner pour chaîner plus de requêtes.
Sinon, s'il vous paraît trop limité, un framework comme JQuery pourrait peut être apporter les fonctionnalités requises...
Je ne vois pas non plus de prise en compte de la mémoire tampon. La fonction XHR va relire le fichier qui se trouve en cache, même s'il a été modifié. Ce problème est géré par Anaa.eu et bien sûr par tous les frameworks sérieux.
03-10-2007 12:13:40
paulux1
Bonjour,
Merci tout d'abord au webmaster pour sa réponse qui a orienté mes recherches
Mes questions se centralisent maintennant ainsi:
1 - Comment faire pour intégrer un effet de la classe scriptaculous dans ma requête Ajax.Updater
Voici ma requête:
<?Php For ($x=1,$x<=count($Tb),$x++){ ?> <script language="JavaScript" > var parametres = 'info1=1&info2=2'; var url = 'Operateur/<?Php echo $Tb[$x] ?>.php'; var myAjax = new Ajax.Updater('TravelMess',url,{method: 'get',parameters: parametres}); </script> <?Php } ?>comment faire pour rajouter : Effect.Fade('TravelMess'); ? 2 - Dans un autre forum il m'a été déconseillé de faire une boucle en php pour lancer mes requêtes successives. Le conseil m'a été donné d'utiliser JSON pour envoyer un tableau ( Mon tableau contient au maximum 10 à 15 requêtes). Quelqu'un sait comment cela s'utilise? y a-t-il un autre solution? Merci de vos réponses,
06-10-2007 17:39:19
webmaster
En ce qui concerne le premier code, il ne pourra pas fonctionner.
En effet le PHP sera exécuté sur le serveur avant que la page ne soit envoyée, tandis que le JavaScript sera exécuté par le navigateur, mais alors le code PHP aura disparu.
Il faudrait plutôt une boucle en JavaScript.
On peut générér du JavaScript en PHP avec la commande echo, mais on ne peut faire interagir PHP et JavaScript.
Pour lancer des requêtes, il faudrait appeler un script PHP auquel on envoie des données par la méthode send() de XMLHttpRequest. Des exemples sont fournis sur le tutoriel Ajax et dans les démos Ajax.
© 2007-2013 Xul.fr