Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ajax = moche

6 réponses
Avatar
luc2
bonjour,

en programmation imperative, si on fait beaucoup de fonctions, le code parait
lisible, propre, simple... exemple :

recuperer_donnees();
sauvegarder_donnees();
affichage_donnees();

par contre, avec l'ajax, je sais pas si c'est ca qu'on appelle la programmation
evenementielle, mais ca me donne l'impression que je code comme un porc...
exemple :

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {

alert( "'voyez l'idee ?" );

}
});

}
});

}
});

}
});

}
});

}
});

}
});

}
});

}
});

}
});

}
});

}
});

}
});

ca se soigne ? si oui, comment ? j'ai tente de faire des fonctions, comme en
programmation imperative, mais ca colle pas trop a la logique... exemple :

recuperer_donnees();
sauvegarder_donnees();
//affichage_donnees();

l'affichage des donnees ne doit se faire que lorsque la fonction
sauvegarder_donnees() aura recu le retour de son appel ajax. donc, cet
affichage est defini A L'INTERIEUR de la fonction sauvegarder_donnees(); par
consequent, logiquement, le nom de la fonction est faux. il faudrait plutot la
nommer comme ca :

recuperer_donnees();
sauvegarder_et_afficher_les_donnees();
//affichage_donnees();

mais bon, ca veut dire que la fonction n'a pas une tache unique, et plus le
programme grossit, plus j'ai des fonctions qui font 50 taches, plus j'ai du mal
a decouper le programme en petites entites simples.

6 réponses

Avatar
Vince
luc2 a écrit :
bonjour,

en programmation imperative, si on fait beaucoup de fonctions, le code parait
lisible, propre, simple... exemple :

recuperer_donnees();
sauvegarder_donnees();
affichage_donnees();

par contre, avec l'ajax, je sais pas si c'est ca qu'on appelle la
programmation
evenementielle, mais ca me donne l'impression que je code comme un porc...
exemple :

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {
}
});

}
});

ca se soigne ? si oui, comment ?



Tu utilises jQuery ou quelque chose d'équivalent ?
Avatar
luc2
Le 27-11-2012, Vince a écrit :
luc2 a écrit :
bonjour,

en programmation imperative, si on fait beaucoup de fonctions, le code parait
lisible, propre, simple... exemple :

recuperer_donnees();
sauvegarder_donnees();
affichage_donnees();

par contre, avec l'ajax, je sais pas si c'est ca qu'on appelle la
programmation
evenementielle, mais ca me donne l'impression que je code comme un porc...
exemple :

$.ajax({
url: 'script.php',
success: function(r) {

$.ajax({
url: 'script.php',
success: function(r) {
}
});

}
});

ca se soigne ? si oui, comment ?



Tu utilises jQuery ou quelque chose d'équivalent ?



c'est jquery
Avatar
SAM
Le 27/11/12 13:30, luc2 a écrit :
bonjour,



Salut Lucedé,

en programmation imperative, si on fait beaucoup de fonctions, le code parait
lisible, propre, simple... exemple :

recuperer_donnees();
sauvegarder_donnees();
affichage_donnees();

par contre, avec l'ajax, je sais pas si c'est ca qu'on appelle la programmation
evenementielle, mais ca me donne l'impression que je code comme un porc...
exemple :



Je ne comprends pas cet exemple
(il est vrai que je ne parle pas le jquery ...)
tu fais appeler de l'ajax par de l'ajax et encore et encore ????
ça ne peut se traiter en 1 fois côté serveur ?

Là, chez moi à la campagne, je sens que je vais pouvoir m'énerver en
attendant que les ajaxionnages aient fini leurs allers et retours (entre
chez moi et le serveur et à travers mon mauvais ADSL)

ca se soigne ? si oui, comment ?



on jette jquery
ou bien on tente de ne pas en rester/devenir esclave ?

j'ai tente de faire des fonctions, comme en
programmation imperative, mais ca colle pas trop a la logique...



la logique de quoi ?

exemple :

recuperer_donnees();
sauvegarder_donnees();
//affichage_donnees();



non !
récup(|)
+----> sauve(|)
+----> affiche()
À mon idée, l'ajaxionnage n'a rien à y voir question découpe des fonctions

l'affichage des donnees ne doit se faire que lorsque la fonction
sauvegarder_donnees() aura recu le retour de son appel ajax.



oui
if (httpRequest.status == 200) {
affiche()
}
else alert('kput');


donc, cet
affichage est defini A L'INTERIEUR de la fonction sauvegarder_donnees(); par
consequent, logiquement, le nom de la fonction est faux. il faudrait plutot la
nommer comme ca :



ben non, à L'INTERIEUR il n'y a pas à définir la fonction, il n'yaka
l'appeler, hop !

jquery ça déforme l'entendement ! à croire.

revoir le B A BA du httpRequest ?
<https://developer.mozilla.org/fr/docs/AJAX:Premiers_pas>

mais bon, ca veut dire que la fonction n'a pas une tache unique,



si, la fonction de récup des données peut être assez unique,
(on lui passe les paramètres (où trouver les données) l'url vers où
envoyer et un indice pour la fonction à employer en fin de job).

Celle d'affichage ... ça dépend de ce qui est récupéré à la suite de la
requête
si c'est du HTML il n'y a qu'à l'innerHTLMLer
si c'est du fragment DOM, yaka l'appender ou la childRemplacer

plus le programme grossit, plus j'ai des fonctions qui font 50 taches,



Ha Ben ! Pour sûr.
(50 taches ou 50 fonctions ... ce qui revient à du pareil au même, non?)

plus j'ai du mal a decouper le programme en petites entites simples.



Quand on jQuerie on n'emploie plus le mot "simple" ! ! !
c'est antinomique !

--
Stéphane Moriaux avec/with iMac-intel
Avatar
Paul Gaborit
À (at) Wed, 28 Nov 2012 00:41:07 +0100,
SAM écrivait (wrote):

Le 27/11/12 13:30, luc2 a écrit :
en programmation imperative, si on fait beaucoup de fonctions, le code parait
lisible, propre, simple... exemple :

recuperer_donnees();
sauvegarder_donnees();
affichage_donnees();

par contre, avec l'ajax, je sais pas si c'est ca qu'on appelle la programmation
evenementielle, mais ca me donne l'impression que je code comme un porc...
exemple :



Je ne comprends pas cet exemple
(il est vrai que je ne parle pas le jquery ...)
tu fais appeler de l'ajax par de l'ajax et encore et encore ????
ça ne peut se traiter en 1 fois côté serveur ?

Là, chez moi à la campagne, je sens que je vais pouvoir m'énerver en
attendant que les ajaxionnages aient fini leurs allers et retours (entre
chez moi et le serveur et à travers mon mauvais ADSL)

ca se soigne ? si oui, comment ?



on jette jquery
ou bien on tente de ne pas en rester/devenir esclave ?



En lisant cela (et la suite de votre message), je pense qu'on comprend
que vous n'appréciez pas jQuery.

Mais la question posée, n'a strictement rien à voir avec jQuery. Elle
pourrait se poser de la même manière avec n'importe quel bibliothèque ou
même si on code tout soi-même en Javascript.

j'ai tente de faire des fonctions, comme en
programmation imperative, mais ca colle pas trop a la logique...



la logique de quoi ?

exemple :

recuperer_donnees();
sauvegarder_donnees();
//affichage_donnees();



non !
récup(|)
+----> sauve(|)
+----> affiche()
À mon idée, l'ajaxionnage n'a rien à y voir question découpe des fonctions



Et pourtant, c'est bien là le nœud du problème.

l'affichage des donnees ne doit se faire que lorsque la fonction
sauvegarder_donnees() aura recu le retour de son appel ajax.



oui
if (httpRequest.status == 200) {
affiche()
}
else alert('kput');


donc, cet
affichage est defini A L'INTERIEUR de la fonction sauvegarder_donnees(); par
consequent, logiquement, le nom de la fonction est faux. il faudrait plutot la
nommer comme ca :



ben non, à L'INTERIEUR il n'y a pas à définir la fonction, il n'yaka
l'appeler, hop !



Et voilà: en programmation "impérative classique", un appel de fonction
se termine lorqu'elle a terminée son calcul et on peut immédiatement
récupérer le résultat pour le traiter ensuite à la suite de
l'appel. Ici, du fait du fonctionnement *asynchrone* des requêtes au
serveur, la fonction qui y fait appel se termine sans qu'on ait le
résultat (la fonction a juste posté la requête). Et on doit créer une
*autre* *fonction* de traitement qui sera appelée lors de la réception
de la réponse.

jquery ça déforme l'entendement ! à croire.



Rien à voir avec jQuery !

En revanche, il faut penser son programme de manière asynchrone. Et cela
peut poser quelques problèmes. Surtout si le côté serveur n'est pas
modifiable.

Les deux algorithme ci-dessous sont assez simples à coder en
programmation classique peuvent aboutir à une implémentation
relativement similaire :

=== Algo 1 == liste <- récuperer_liste()
pour chaque élément de liste faire
traitement(élément)
fin

=== Algo 2 == liste <- récuperer_liste()
a <- initialisation
pour chaque élément de liste faire
a <- combine(a, traitement(élément))
fin

Dans un contexte asynchrone où la fonction 'traitement()' fait appel au
serveur pour obtenir des informations, c'est un peu moins évident. Dans
le premier cas, le traiment des éléments peut se faire en parallèle de
manière asynchrone. Dans le deuxième cas, il faut prévoir une fonction
de traitement qui déclenche aussi l'appel à la suite de la boucle
(l'appel à 'combine' et les traitements suivants).

Or si on a plusieurs dizaines d'algorithmes du type "Algo 2" (avec une
fonction 'combine' différente), cela peut amener à coder des dizaines de
fonctions spécifiques qui font l'appel à 'traitement' pius enchaîne la
suite des boucles. Ce qui est assez inefficace.

En s'en sort en analysant correctement ses algorithmes pour extraire ce
qui est commun à tous dans des fonctions génériques et en ne conservant
en fonction locale (en tant que "closure") que les parties spécifiques à
chacun des algorithmes.

C'est de la factorisation mais sur les aspects asynchrones. Ce concept
n'a rien d'évident au départ et n'a rien à voir avec l'utilisation ou
non de jQuery (et n'a même rien de spécifique à Javascript).

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
luc2
merci d'avoir explicite ma question, je ne l'aurais pas fait mieux moi-meme, ca
fait plaisir de voir que quelqu'un ait compris...
Avatar
Olivier Miakinen
Le 29/11/2012 10:17, luc2 répondait à Paul Gaborit :
merci d'avoir explicite ma question, je ne l'aurais pas fait mieux moi-meme, ca
fait plaisir de voir que quelqu'un ait compris...



Non seulement il a explicité la question, mais en plus il y a répondu :
ce qui rend cette programmation si différente de la programmation
impérative « classique », c'est le côté asynchrone des requêtes au
serveur.

Cordialement,
--
Olivier Miakinen