Administrateur PHPfrance |
3131 Messages
03 mai 2006, 17:59
En vrac, ce qui me vient à l'esprit pour les limitations :
- C'est du Ajax sans le X (ça franchement, je n'en ai cure)
- C'est un chargement de script, en sachant qu'un script ça ne se décharge pas, on a vite fait de faire sombrer le navigateur dans un memory leak, ou en tous cas de voir les performances de son appli web s'écrouler. Et ça c'est pas terrible. Dans tous les cas ça dépendra du navigateur, mais le risque est là.
- Je pense que générer un <script src="..."> après exécution de la page peut ne pas fonctionner sur certains navigateurs. À vérifier, mais ça a l'air de fonctionner sur les principaux navigateurs (au passage : ceux qui supportent également XHR).
- Cela nécessite que le navigateur supporte le DOM correctement, ce qui implique a priori que ce navigateur a l'objet XHR integré, autant utiliser ce qui existe alors, non ?
D'autant que l'objet XHR étant "internal" il y a sûrement un gain de performance à l'utiliser plutôt qu'une méthode tierse.
- Cela ne permet pas de gérer l'état d'une requête (réponse du serveur : 404, 200, 403, etc...) et d'agir selon.
- Cela ne permet pas de faire de requête avec la méthode POST.
À première vue je ne vois pas d'autres inconvénients, je dirais que ça convient bien pour de petites applications ponctuelles qui n'ont pas besoin de beaucoup d'échanges client-serveur (pour éviter la menace du memory-leak), mais pour du plus "sérieux" je ne m'y risquerais pas.
D'autant plus que l'objet XHR est maintenant facilement camouflé dans des frameworks Ajax de très bonne facture tous autant qu'ils sont, et permet sans perte de performances (pour peu qu'on ne charge que ce dont on a besoin, par exemple sur script.aculo.us) d'utiliser l'Ajax de manière très simple. Exemple avec Script.Aculo.Us (justement) :
Code : Tout sélectionner
new Ajax.Request('/server.php', {
method: 'post',
postBody: 'var1=val1&var2=val2',
onSuccess: function(req) {
alert("Success ! ResponseText = "+req.responseText);
},
onFailure: function(req) {
alert("Error ! Status = "+req.status+" - "+req.statusText);
}
});
C'est quand-même plus complet (gestion d'erreur, méthode post), et pas si compliqué
