AJAX : LIBRAIRIE SIMPLIFIÉE PERMETTANT EN 1 LIGNE DE FAIRE DES REQUETES

cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 - 26 sept. 2006 à 23:47
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015 - 13 avril 2011 à 23:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39686-ajax-librairie-simplifiee-permettant-en-1-ligne-de-faire-des-requetes

cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
13 avril 2011 à 23:39
Salut à tous :)

Je viens de faire un test sur un hebergement avec :
Apache/1.3.42 (Unix) PHP/5.3.5 with Suhosin-Patch
Version du client MySQL: 5.1.55
Est cela n'affiche pas la lecture du fichier (par contre il execute le contenu) je place du texte ou des images pour qu'il affiche l'info et la rien

Si quelqu'un a une idée, merci
dadav51100 Messages postés 1 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 26 février 2010
26 févr. 2010 à 11:11
ton source m'a beaucoup aider merci ^^
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
6 déc. 2009 à 16:23
En fait j'ai réussi, le soucis maintenant consisterai à raffraichir la page initial une fois le click fait :)
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
6 déc. 2009 à 13:20
Bonjour , cette source est un peu vieille mais bon je relance quand même on sait jamais

Je fait une requete en boucle pour afficher des fiches avec un status 0
Dans chaque fiches il y a une petite case qui met une image rouge , si je click c passe au vert
J'ai donc placé le div >
..
à cet endroit,
La page d'appel contient la requete qui fait en sorte de basculer en vert

Jusque la tout marche , mais le soucis est le suivant
Si je clic dans la premiere fiche cela bascule en vert
Si je clic sur la 2eme fiche cela ne change pas , il veux changer le contenu uniquement de la premiere fiche comme si le
de la première fiche ets le référant

Question maintenant : comment modifier le code pour ajouter un numéro au div , par exemple en prenant l'id de chaque fiche :
..


J'ai tenté de faire
> et de modifier les functions mais cela ne fonctionne pas

Si quelqu'un aurait une solution (ou une source) merci d'avance :)
laquiche31 Messages postés 7 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 13:27
ca marche merci
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
27 août 2008 à 12:54
@Laquiche: pas dur...

Le plus simple ; fais passer le parametre dans l'URL du script de ta requete. Dans celui-ci, recupere le en mode GET. Puis, insére ces parametres dans le resultat JSON (ou XML) que ton script doit renvoyer ;o)

Le mieux ; indique les parametres via "paramString" et definit la "method" en POST.
laquiche31 Messages postés 7 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 09:25
bonjour,

Je cherche le moyen de faire passé un parametre a la fonction executée en cas de succes.
mais je bug puisque pour nommé cette fonction on ne met pas les parenteses onSucces:fonction, donc ou peut-on faire passer ces parametres.
merci
chang93 Messages postés 2 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2009
13 mars 2008 à 12:09
Pas mal pour débuter avec ajax, donc 8/10
Disicom Messages postés 107 Date d'inscription vendredi 8 novembre 2002 Statut Membre Dernière intervention 28 mars 2011
18 déc. 2007 à 18:07
Bon boulot en tout cas !
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
15 déc. 2007 à 16:10
Nouveau défi: j'ai besoin de régler un délais pour les requetes, et de recevoir un code d'erreur spécial quand le délais est dépassé.

J'etudie çà ce weekend ;o)
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
28 oct. 2007 à 22:50
En fait, on peut faire plus propre:

dans 'request':
if ( typeof(url) != 'string' ) {
alert('url de format invalide ( l\'url est obligatoire )');
return;
}
else this.properties['url'] = url;

this.setReadyProcess();
this.processRequest();
mettre:

if ( typeof(url) != 'string' ) {
alert('url de format invalide ( l\'url est obligatoire )');
return;
}
else this.properties['url'] = url;

if(this.properties['async'] == true){ //branchement seulement si asynch
this.setReadyProcess();
}
this.processRequest();

//////////////////////
//////////////////////

Dans 'processequest':

if ( this.properties['method'] == 'post' )
this.Ajax_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
this.Ajax_object.send(this.properties['method'] == 'post' ? this.properties['paramString'] : null);

mettre:

if ( this.properties['method'] == 'post' )
this.Ajax_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
this.Ajax_object.send(this.properties['method'] == 'post' ? this.properties['paramString'] : null);
if(this.properties['async'] == false){ // correction pour le bug de FireFox
this.processResult();
}

///////////////////////
//////////////////////

setReadyProcess: function() {
this.Ajax_object.onreadystatechange = function() {
this.processResult();
}.bind(this);
},

////////////////////////////////
////////////////////////////////
enfin, ajouter:

/**
* Fonction permettant d'enregistrer les fonctions executees lors du succes ou d'une erreur
*/
processResult: function() {
if (this.Ajax_object.readyState == 4 ) {
responseText = this.Ajax_object.responseText;
responseXML = this.Ajax_object.responseXML;
this.responseText = this.Ajax_object.responseText;
this.responseXML = this.Ajax_object.responseXML;
if ( this.Ajax_object.status == 200 ) this.properties['successEnd'](this.Ajax_object);
else this.properties['errorEnd'](this.Ajax_object);
}
},
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
28 oct. 2007 à 22:27
Salut rubiks10,
alors voila, ta source ma résolue 4h de devellopement. Grosso-modo, je partais dans la même direction, mais je n'ai pas réussi à faire le truc avec la fonction .bind(). En fait, j'était bloqué à cause de ce petit "bug" qui faisait qu'il métait impossible d'accéder à mon objet au sein de ma function branchée sur onreadystatechange. Du coup, je te pique ton code qui est plus aboutis.
Par contre, j'avais résolu un autre bug qui existe dans ta librairie.

Sous IE, tout marche nickel, par contre, sous FF, le modesynchrone ne fonctionne pas. Il semblerais que ce soit un bug de FF.

La solution trouvée est de rajouter un test juste apres l'instruction send().
Ca donne ça:

processRequest: function() {
this.Ajax_object.open(
this.properties['method'],
this.properties['method'] == 'post' ?
this.properties['url'] : this.properties['url']+this.properties['paramString'],
this.properties['async']
);
if ( this.properties['method'] == 'post' )
this.Ajax_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
this.Ajax_object.send(this.properties['method'] == 'post' ? this.properties['paramString'] : null);
//////////////répétition du code de la function setReadyProcess()
if(this.properties['async'] == false){
if (this.Ajax_object.readyState == 4 ) {
responseText = this.Ajax_object.responseText;
responseXML = this.Ajax_object.responseXML;
this.responseText = this.Ajax_object.responseText;
this.responseXML = this.Ajax_object.responseXML;
if ( this.Ajax_object.status == 200 ) this.properties['successEnd'](this.Ajax_object);
else this.properties['errorEnd'](this.Ajax_object);
}
}

}


et là, ça fonctionne.
En tout cas, bon boulot: 9/10
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
27 sept. 2007 à 11:03
Oups désolé, j'étais pas au courant de l'update de Juin qui corrige les problèmes que je viens d'énoncer...
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
27 sept. 2007 à 10:54
Attention, il y a de gros risques de confusion quand on fait plusieurs requêtes simultanées en mode asynchrone. Et aussi un souci d'affection de la classe dans des variables globales depuis des fonctions.

Pour résoudre ces problèmes, j'ai fait les modifs ci-dessous dans la fonction finalize() pour passer les resultats comme argument des fonctions associées à la requête.

if ( this.Ajax_object.status == 200 ) this.properties['successEnd'](this.Ajax_object.responseText,this.Ajax_object.responseXML);
else
this.properties['errorEnd'](this.Ajax_object.status);
paulux1 Messages postés 4 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 27 avril 2012
17 août 2007 à 10:15
Bonjour Rubik10,

J'utilise ta classe pour effectuer plusieurs requêtes simultanées. Ca fonctionne super. En revanche, je souhaiterais récupérer la valeur contenue dans une variable de session ($_session[....]) qui évolue en fonction des différents résultats de recherche effectués. Y a-t-il un moyen pour récupérer cette valeur au lieu de récupérer le texte d'une page?

Merci,
sambucus Messages postés 17 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 25 août 2007
14 août 2007 à 07:02
Bonjour,

J'ai une erreur 405 méthode non autorisée :

http://blogdelaureminervois.free.fr/grandesfamilles/

Suivre l'arborescence :

Lauran Cabaret
l'ouvrage
heresie

Alors qu'en local cela fonctionne ainsi que votre exemple fonctionne en ligne ?

Si non cela semble efficace et pratique.

Merci,

Salutations
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
20 juil. 2007 à 10:13
rubiks10, si tu es bien l'auteur de cette source, donne une URL de ton blog ou site perso pour te faire un peu de pub sur life2front.com dont les profils LiFE-Line utilisent ta lib :o)

Ya pô un update de prévu ? ... Sinon, j'pense la ré-écrire/organiser pour pour mes besoins futurs.

NB: lesscripts de compression JS abime ta lib :o(
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
20 juil. 2007 à 02:28
Salut Overstone

Remplace ton lien : [include/supprimer.php?date=<?php echo $donnees['date']; ?>

par : blablabla ]

voila quand tu cliques sur le lien (même si apparemment rien ne se passe) ta fiche est supprimée dynamiquement

@+
cs_overstone Messages postés 3 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 18 juillet 2007
18 juil. 2007 à 12:47
Bonjour,

Je bloque depuis 5 jours sur comment faire pour supprimer une fiche d'une table Mysql en passant par AJAX pour ne pas recharger la page.

Mon code fonctionne à merveille en php avec ce lien :
Mais malgré ton tuto je n'arrive pas à comprendre le passage par AJAX pour faire strictement la même chose sans devoir recharger la page. ????
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
11 juin 2007 à 20:44
re m3919

Je sais pas si toi par contre tu as pris le temps de comprendre le fonctionnement de ma source...

C'est pourtant explicite !! tu remplaces les param1=chaine etc... par les paramètres que tu veux
en reprenant ton exemple :

new Ajax_request('./testHTML.php',{method:'get',params:'chaine=bonjour'});

ou

new Ajax_request('./testHTML.php',{method:'get',params:'chaine='+chaine}); (si tu veux que le paramètre soit dynamique.

Voilà
@++
m3919 Messages postés 2 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 11 juin 2007
11 juin 2007 à 19:08
bonjour,
merci pour le temps que tu as pris pour corriger et adapter ton code et l'exemple d'utilisation qui m'a bien aidé. Et pour abuser de ton temps j'ai une autre question.
Peut-on passer des variables comme parametre c'est a dire faire qql
du style:
var chaine= "bonjour"
....
new Ajax_request('./testHTML.php',{method:'get',params:'param1=chaine¶m2=false'});
merci,
A+
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
9 juin 2007 à 00:53
Salut m3919

Oui c'est normal j'avais fais une erreur dans la documentation... les paramètres à utiliser sont en fait :
"onSuccess" au lieu de "successEnd", "onError" au lieu de "errorEnd" ou pour les paramètres "params" au lieu de "paramString"

J'ai mis à jour la source (le code est inchangé, seulement les commentaires sont mis a jour)
Merci bien de m'avoir indiqué cette erreur.

@+
m3919 Messages postés 2 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 11 juin 2007
8 juin 2007 à 13:59
bonjour,
j'essai d'utiliser ta librairie à partir de ton fichier d'exemple.
lors de l'appel de la fonction, je veux utiliser successEnd:
new Ajax_request('./testXML.php',{method:'post',successEnd: sucXML, params:'param1=true¶m2=false'});
Mais avec la syntaxe ci-dessus, cela ne semble pas fonctionner, car j'ai l'affichage DEBUGSUCCESSMESSAGE qui apparait
si tu avais le temps de m'expliquer, merci
cs_JLN Messages postés 371 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 17 juin 2013
30 avril 2007 à 11:35
Bonjour,
Encore une fois un très bon code qui servira ceux qui n'y connaissent rien (ou presque) en ajax. Et je suis d'accord avec toi pour dire que les librairies fastidieuse ne servent qu'en partie quelques fois à peine 10%. Alors que là on a affaire à de l'utilisable tout de suite et sans contrainte, et ceux qui comme moi maitrise un peu le php et presque pas le javascript c'est plus simple. Je met 10 pour encourager à aider les plus faible (j'en fais partie).

Bonne prog à tous...
@+ JLN
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
22 nov. 2006 à 19:21
Si le système de vote de CS n'était pas planté, j'aurais mis 10.

Trés bonne source qui correspond parfaite à son titre, bien commenté, lègère, et donc parfaite quand on veut juste faire une requête en AJAX comme pour les tests de validité d'un formulaire (mail,login,password).

Par contre, l'exemple n'est pas trés convaincant, fodrait qqch de plus "spectaculaire" ;op
paulfillit Messages postés 1 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 13 novembre 2006
13 nov. 2006 à 13:12
Bonjour,

Merci pour ce code qui m?a permis de me rendre compte des possibilités d'AJAX associés au PHP. J'ai pu ainsi réaliser un script qui lance plusieurs process et renseigne un bdd.

Le seul souci qu'il me reste est de pouvoir savoir quand toutes les recherches sont finie afin d'afficher une page de résultat (lecture de ma table rensigné).

Je voulais m?inspirer de la fonction « debug » qui renvoi en fait n'importe quel texte affiché dans le script appelé?

Y aurait-il un moyen de renseigner un flux xml ou un (tableau du type $Resultat[?mapage?]=?OK? ); afin que je puisse faire une boucle « while » ( en prévoyant un Timout) ?

J'espère que je n'ai pas été trop flou?

Merci pour vos réponses,
younes371 Messages postés 502 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 20 mars 2012
6 oct. 2006 à 23:28
Merci pour ton aide
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
6 oct. 2006 à 21:55
Ok younes... par contre je vois pa pourquoi tu demandes ca ici... car mon module d'autocompletion n'a rien a voir a ce que tu veux toi.

Et puis aussi sache que le contenu des textarea est illimité.

Pour ton exemple tu vas voir dans mes sources sur ce site et tu télécharge ma librairie AJAX, ensuite tu codes un fichier en php ou autre langage serveur qui te permet de recevoir le contenu des textarea et de l'enregistrer dynamiquement sur la base.

Voila mais je te le dis encore ta question n'a rien a voir avec l'autocompletion

bonne prog

-- The Rubik's Man --
younes371 Messages postés 502 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 20 mars 2012
4 oct. 2006 à 19:01
on prend l exemple qu on a plusieurs zone de tenxte (4 par exemple). si on modifie le texte d'une zone, on modifie aussi son contenue ds la BD.
juste une idée:
et meme si on ve aller plus lion, si les 4 zones sont remplies une nouvelle zone apparâtaire.
Merci Bcp
younes371 Messages postés 502 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 20 mars 2012
4 oct. 2006 à 18:58
Bonjour,
Oui exactement ça,
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
4 oct. 2006 à 18:14
Salut Younes

en fait j'ai pas trop compris ce que tu demandes...
Tu veux que je te fasse un script qui fait quoi exactement??

- que lorsque a chaque touche appuyée dans un textarea le contenu soit enregistré dans une table d'une base de données ??

c'est bien ca??
younes371 Messages postés 502 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 20 mars 2012
4 oct. 2006 à 13:32
Bonjour,
c ets un bon code, si possible je ve que lorsque l'utilisateur tape un texte ds une zone de texte, le contenue de la zone s'enregistre dans la base de données.
Merci.
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
27 sept. 2006 à 23:33
Oui Stailer en fait le but de ma librairie etait de réduire au minimum le code car en fait on se retrouve souvent avec des centaines de lignes de codes provenant d'une librairie alors que l'on va en utiliser qu'une dizaine...

Et la plupart du temps les débutants en Ajax lachent vite l'affaire en essayant de comprendre comment utiliser les librairies " mega " completes.

Donc j'ai en fait programmé une librairie Ajax pour débutant pour qu'ils comprenent le fonctionnement grace a l'abondance des commentaires et a la petite masse de code qui ne va pas " démoraliser " les newbies...

Voila voila mais je suis entierement d'accord avec toi qu'il existe des librairies vraiment completes !!! Mais a part dans des projets gigantesques et vraiment complexes l'intégralité des methodes définies n'est jamais utilisée

Voila voila. Merci encore pour ton commentaire
--The Rubik's Man--
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
26 sept. 2006 à 23:47
Ton système est pas mal, mais basique.
Objectivement il existe de très bonnes classes php pour Ajax: Najax (sur phpclasses.org) , Sajax ou encore Xajax. Le gros avantages est que tu peux appeller les méthode d'une classe php avec le même nom depuis le javascript.
Et elles marchent très bien. Notamment Najax que j'ai utilisé en profondeur et avec lequel j'ai eu aucun souci particulier. Dans ton cas on doit utiliser des fichiers externes...
Bref, c'est quand même pas mal, et tu simplifies également pas mal les choses. Alors 7/10
Rejoignez-nous