Erreur JavaScript "n'est pas une fonction" lors de l'appel de la méthode définie
C'est mon code:
request_xml: function()
{
http_request = false;
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
if (!http_request)
{
return false;
}
http_request.onreadystatechange = this.response_xml;
http_request.open('GET', realXmlUrl, true);
http_request.send(null);
xmlDoc = http_request.responseXML;
},
response_xml:function ()
{
if (http_request.readyState == 4)
{
if(http_request.status == 404 && countXmlUrl<=3)
{
countXmlUrl++;
realXmlUrl = xmlUrl[countXmlUrl];
this.request_xml();
}
if (http_request.status == 200)
{
xmlDoc = http_request.responseXML;
alert("need to update3");
this.peter_save_data();
}
}
},
peter_save_data:function()
{
//removed function code
},
Étrangement, l'alerte se déclenche sans problème, mais l'appel de la fonction en dessous me donne cette erreur:
Error: this.peter_save_data is not a function
L'appel de la même sacrément fonction à partir d'une autre fonction ailleurs fonctionne très bien.
source d'informationauteur Ryan
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire cela, juste avant l'appel de la génération XML.
et à plus tard...
Parce que
this
change fréquemment lors de l'évolution de la portée en utilisant une nouvelle fonction, vous ne pouvez pas accéder à la valeur d'origine en l'utilisant. De l'Aliasing à qui permet toujours d'accéder à la valeur d'origine de cette.Une pièce importante du puzzle qui manque, c'est comment
response_xml
est appelé. Ceci est important, parce que cela va changer quoithis
(voir Jared commentaire).Rappelez-vous que
this
peut être considéré comme (à peu près) "le récepteur de l'appel de la méthode". Siresponse_xml
est passé directement à l'utiliser comme un rappel puis bien sûr, il ne fonctionne pas --this
sera probablementwindow
.Tenir compte de ces:
Heureux de codage.
Le "fix" est probablement juste de changer la façon dont
response_xml
est appelé. Il existe de nombreuses façons de le faire (en général avec une fermeture).Exemples:
Personnellement, je voudrais juste utiliser jQuery ou similaire 😉
Si vous souhaitez une classe comme le comportement, utilisez le bouton droit de la syntaxe, Les bibliothèques qui utilisent, à l'aide de JSON pour passer un paramètre à une fonction qui fait une classe.
Ou, utiliser les bibliothèques comme Mootools où vous pouvez le faire sous forme de JSON: