Onreadystatechange et this....

Messages postés
34
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
2 décembre 2009
- - Dernière réponse : vinise
Messages postés
34
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
2 décembre 2009
- 2 déc. 2009 à 15:29
bonjour à tous

jai une petite question pour vous... j'ai créer une classe Ajax qui est et dans cette classe j'utilise onreadystatechange avec une fonction pour gerer les changement malheureusement je ne comprend pas pourquoi je ne peut pas utiliser le "this" dans  cette fonction...

function Ajax() {
.....
ceci =this;
        this.xmlHttp.onreadystatechange=function(){
            var readyState = ceci.xmlHttp.readyState;
           
            if (readyState==4 || readyState=="complete")
            {
                $(ceci.target).innerHTML=ceci.xmlHttp.responseText;
            } };

...

}

pourquoi sui-je obliger de sauver this dans une variable avant de l'utiliser??
Afficher la suite 

16 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
bonjour,
this c'est l'objet sur "lequel" on est"
dans une fonction, c'est... la fonction elle même
Cordialement[mon Site][M'écrire]Bul
Commenter la réponse de Bul3
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
0
Merci
NON. This désigne l'objet dont on exécute la méthode.

Les fonctions isolées dans Javascript sont des méthodes ajoutées à l'objet document (dans ce cas this sera généralement le document).

Cependant pour les évènements AJAX, this sera l'objet dans lequel la requête XHTTP a été créée et un objet XHTTP est normalement créé indépendamment du document. Du coup pour accéder au document il faut en sauvegarder une référence.

Bref la variable "ceci" devrait plutôt être appelée "document" dans le code ci-dessus. Mais elle est même inutile puisque un objet XHTTP a un champ dédié pour ça: "target", qu'on peut renseigner avec la référence au document, ou à un de ses éléments.

function Ajax() {
.....
xmlHttp.target = document;
xmlHttp.onreadystatechange = function() {
var readyState = this.readyState;
if (readyState 4 || readyState "complete") {
var element = this.target.getElementById('Xyz');
element.innerHTML = this.responseText;
}
};
...
}

ou

function Ajax() {
.....
xmlHttp.target = document.getElementById('Xyz');
xmlHttp.onreadystatechange = function() {
var readyState = this.readyState;
if (readyState 4 || readyState "complete") {
var element = this.target;
element.innerHTML = this.responseText;
}
};
...
}
Commenter la réponse de verdy_p
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
ça fait 2 fois que tu interviens sur de vieux sujets
une question ? tu testes ce que tu avances ?
car ici aussi, esaye, ça ne marche pas !
Commenter la réponse de Bul3
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
il fallait lire :
car ici non plus, essaye, ça ne marche pas !
Commenter la réponse de Bul3
Messages postés
34
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
2 décembre 2009
0
Merci
oui surtout apres 9 mois... je pense avoir résolut mon problème tu sais...
Commenter la réponse de vinise
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
0
Merci
Arrêtez les questions de date, d'une part il était en haut de liste (je n'ai pas cherché longtemps les historiques), et le sujet était resté ouvert (personne n'avait répondu, et l'auteur non plus)
Commenter la réponse de verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
0
Merci
Dis donc BUL, tu joues les redresseurs, pour te croire obligé de surveiller tout ce qui se passe ici, pour critiquer dans la minute, histoire de faire fuir ceux qui viennent de temps en temps?
Je ne vois pas ce que j'ai écrit qui est incorrect. En revanche j'ai corrigé l'expression fausse "l'objet sur lequel on est" qui ne veut strictement rien dire et est encore plus ambigu que la question posée.
Commenter la réponse de verdy_p
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
0
Merci
Commenter la réponse de verdy_p
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
je ne surveille rien du tout
c'est toi qui interviens sur des sujets
qui datent, qui plus est pour raconter
n'importe quoi ( mais ce doit être la faute
de IE, c'est sûr !! ;)))
Commenter la réponse de Bul3
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
0
Merci
Tu fais ch... avec tes "n'importe quoi". Franchement si ta seule intervention c'est pour polémiquer, on n'a pas besoin de toi ici. Tes interventions et commentaires sont hors sujet, et ce site n'est pas TON site où tu peux jouer les censeurs et redresseurs de tords.

(Et pourquoi tu m'écris directement? J'avais supprimé ce sujet de ma liste de suivi. Tu abuses).
Commenter la réponse de verdy_p
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
je ne t'ai pas écris directement !
la preuve, c'est ici que tu réponds.
si tu ne veux plus que j'intervienne, ne
viens pas dire de &€§!$€$ sur de vieux
messages résolus, fais des essais avant.
Commenter la réponse de Bul3
Messages postés
34
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
2 décembre 2009
0
Merci
bon... vous avez fini votre prise de bec... sa commence a bien faire la!!!
Commenter la réponse de vinise
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
certes, certes... je comprend que cela t'agace
mais, mon foie, tu en es un peu responsable, non ?
tu aurais pu avoir la correction de dire que
c'était résolu, même sans révéler comment !!!!
et tu peux éviter de recevoir des messages
suite aux nouvelles interventions, suffit
de décocher ce qui convient !
Commenter la réponse de Bul3
Messages postés
203
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019
0
Merci
Non, justement, les cases sont toutes décochées chez moi. Même pour ce message pour lequel je continue ENCORE à recevoir des alertes emails.

Ce site est bogué et ne respecte pas ce qu'on dit.
Je l'inscris donc comme spammeur maintenant.
Commenter la réponse de verdy_p
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
allons, une dernière réponse et... plonk.
après avoir affirmé que IE était bogué,
voilà que ce site le serait aussi ?
même s'ils avaient quelques défauts,
je ne pense pas que tu sois le plus
qualifié pour porter le moindre jugement
sur quoi que ce soit ;o)))
un mauvais ouvrier rejette toujours
ses fautes sur ses outils, d'après
lui, ce serait eux qui seraient mauvais.
déjà, il faudrait que tu apprennes à lire,
c'est expliqué dans chaque mail envoyé ;o)
Commenter la réponse de Bul3
Messages postés
34
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
2 décembre 2009
0
Merci
la je dit braveau!!

et franchement je pense que ce site est une des plus grandes référances du web niveau programation... et bon même si ce site a des petit defeault minime il est bien mieu que bien des autres et franchement si tu en a marre de ce forum et des email ou de tout autre chose sur se forum rien ne t'empeche de te désinscrire et de nous dire byebye...
Commenter la réponse de vinise