Accueil > Forum > > > > Problème pour crer une classe pour faire de l'ajax...pleaseHELP !!!
Problème pour crer une classe pour faire de l'ajax...pleaseHELP !!!
jeudi 15 janvier 2009 à 16:06:53 |
Problème pour crer une classe pour faire de l'ajax...pleaseHELP !!!

diversjms
|
Bonjour à tous et merci de me lire !!
Afin de faire de l'ajax propement je souhaite créer tous d'abord une classe pour faire de simple requete asyncrhone avec le serveur avec un comportement par défault selon les évenements ( erreur 404 , erreur , success , ect ). Le but est de pouvoir utiliser cette classe comme ceci : var maRequete = new asyncRequest("test.php") ; //je définie la méthode ifSuccess() selon l'utilisation que je désire maRequete .ifSuccess = function (xhr){ //si la requete à réussi } //je définie la méthode ifError () selon la gestion des erreurs que //je désire mais un comportement par défault existe si //je ne définie pas cette méthode ( a voir dans la class ) maRequete .ifError = function (error){ //code selon ce que j'ai besoin de faire } //même chose maRequete.onLoading = function (etat){ //pendant le chargement avec le serveur } maRequete.send() ; //on envois la requete au serveurUn comportement par défault existe pour chacune des 4 méthodes de cette objet comme vous allez le voir dans la class. Voilà donc la classe que j'ai ecrite : function asyncRequest(file){ //Attributs this.data = null ; //les eventuelles variables this.method = 'POST' ; //method utilisé, POST par default var filename = file ; //fichier à joindre //Gestion d'erreur si filename non renseigné if((filename==null) || (filename=='') ){ //On remonte l'erreur en utilisant la methode iferror this.ifError("Le nom du fichier à joindre n'a pas été fournis.") ; return false ; } //Methodes
//methodes ifError() avec son comportement par défault this.ifError = function (error){ if(error == ""){ alert("Erreur durant la requette avec le serveur"); }else{ alert(error) ; } }
//methodes onLoading () avec son comportement par défault this.onLoading = function (statut){ //vide par default. à redéfinir selon ce qu'on désire faire pendant le chargement }
//methodes ifSuccess () avec son comportement par défault this.ifSuccess = function (xhr){ //vide par default. à redéfinir selon l'utilisation de xhr désiré }
//methodes send() , va creer un XMLHTTPRequest et faire la requette this.send = function(){ xhr = new xhrObj() ; //un objet XmlHTTPRequest xhr.open(this.method, filename , true); //Conditionement des variables si on en as if((this.data != null ) && (this.data != '')){ //Si on a demande POST il faut envoye les variables dans l'entette if(this.method == "POST"){ xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); }else{ //sinon methode GET this.filename = this.filename+"?"+data ; } } //Envois de la requette (instruction commune GET et POST) xhr.send(this.data); //Processus de la com ASYNCRHONE xhr.onreadystatechange = function (){
/* C'est à partir d'ici que j'ai un probleme. Ici dans onreadystatechange() je n'arrive plus a accéder aux methodes de ma classe ,this.onLoading() , this.ifError() , this.ifSuccess() */ if (xhr.readyState != 4){ this.onLoading(xhr.readyState) ; // <- introuvable (this.onLoading is not a function) }
//A la fin de la com if (xhr.readyState == 4){
//Gestion de lerreur 404 if (xhr.status == 404){ //si je provoque l'erreur vonlontairement pour tester j'aurrais "this.ifErroris not a function)" this.ifError('Action Impossible : \n Le document est introuvable (erreur 404)') ; } //Si tous s'est bien pass et qu'on a definit une fonction pour le relais, on essaye de l'xcuter if (xhr.status == 200){ this.ifSuccess(xhr) ; //<- introuvable (this.ifSuccess is not a function) } } } } }Bien sur j'arrive à utiliser mes méthodes en dehors de xhr.onreadystatechange() et je suis désespéré de triturer ce code dans tous les sens. Quelqu'un sait t'il pourquoi je ne peux plus accéder aux méthodes à l'intérieur de xhr.onreadystatechange() ????
Merci d'avance à tous ceux qui ce penche sur mon problème, çà fait maintenant 2 semaines que je bloque sur çà.
|
|
dimanche 1 mars 2009 à 21:34:37 |
Re : Problème pour crer une classe pour faire de l'ajax...pleaseHELP !!!

Kimjoa
|
ton problème viens du 'binding' ,les fonctions passé en paramètre d'autre fonction perdent leurs contexte d'origine , onreadystatechange va etre appellé par une fonction native du js, qui va lui mettre en paramètre le onreadystatechangeque que tu aura définit.... en gros, onreadystatechangeva ètre appellé par une autre fonction qui l'aura passé avant en argument.
pour retrouver le contexte de t'as fonction faut en refaire une autre! avec une variable locale à la fonction référencant ton context .
voici en une , celle de prototype; Function.prototype.bind = function() { var __method = this, args = Array.prototype.slice.call(arguments,0), object = args.shift(); return function() { return __method.apply(object, args.concat(Array.prototype.slice.call(arguments,0))); } }
et pour ton code ca donne
this.send = function(){...}.bind(this)
a++
|
|
Cette discussion est classée dans : function, erreur, xhr, if, iferror
Répondre à ce message
Sujets en rapport avec ce message
intérompre une fonction... [ par davidcian ]
Bonjour,Je cherche a stopper le déroulement d'une fonction lors d'une condition, j'ai testé avec return mais ça marche pas...Fonction principal:functi
Dropdownlist et ajax [ par kalabichou ]
Bonjour à tous, Actuellement j'essaye de faire fonctionner 4 dropdownlist dans un environnement j2ee sous eclipse. En utilisant ajax j'envoie mes par
JavaScript - Erreur = Null [ par SpaceHam ]
Je veux faire en JavaScript une page de création bien simple. J'ai un message d'erreur qui m'affiche comme quoi on attend un objet qui serais à Null.
Problème avec IE 6 et 7 (Erreur d'exécution inconnue) [ par ov3rdoze ]
Bonjour à tous J'essaye désespérement de résoudre ce problème. Le script doit si possible envoyer le formulaire via XMLHttpRequest, ou sinon valider
comment garder en mémoire la valeur d'une variable [ par ricky250r ]
Je suis entrain de faire un petit jeu de mémoire et j'ai une variable qui affiche le record le plus bas mais quand je clic sur le bouton nouvelle part
Besoin d'aide jeu mémoire [ par ricky250r ]
Salut a tous j'ai fait un petit jeu de mémoire pour mes enfant et je voudrais ajouter un mode pro(une case a cocher) et quand la case est cocher sa li
mon diapo ne s'affiche pas sans connection [ par hitu ]
Bonjour j'ai réalisé un diaporama mais celui ne s'affiche pas quand je ne suis pas connecté! Merci d'avance voici mon code: [code=as][code=html]
Rechargement d'une page non pris en compte avec certains navigateurs [ par spacedelta ]
[b]Bonjour[/b], [i]J'ai posté un sujet sur ce forum puisque j'ai besoin d'aide, comme je sais que ce forum est hyper actif =D[/i] [u]Alors voici mon p
pb getter et setter sur ie<9 [ par aerolyte ]
bonjour, habitué a l'actionscript me voila bien embéter. J'ai un bout de code qui marche bien sauf pour ie<9 [code=js]var Charg=(function(){ 'use st
Fonction AJAX qui ne se déclenche pas [ par Shivan0910 ]
Bonjour, Je sollicite de votre bienveillance dans la résolution de ce problème qui tend à m'épuiser J'ai deux fonctions function creationXHR() { var
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|