J'utilise XMLHttpRequest, et je veux accéder à une variable locale dans la fonction callback de succès.Comment structurer le callback javascript pour que la portée de la fonction soit correctement entretenue
Voici le code:
function getFileContents(filePath, callbackFn) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
callbackFn(xhr.responseText);
}
}
xhr.open("GET", chrome.extension.getURL(filePath), true);
xhr.send();
}
Et je veux l'appeler comme ceci:
var test = "lol";
getFileContents("hello.js", function(data) {
alert(test);
});
Ici, test
serait hors de la portée de la fonction de rappel, car seule la englobante Les variables de la fonction sont accessibles dans la fonction de rappel. Quel est le meilleur moyen de passer test
à la fonction de rappel afin que le alert(test);
affiche correctement test
?
Edit:
Maintenant, si j'ai le code suivant appelle la fonction définie ci-dessus:
for (var test in testers) {
getFileContents("hello.js", function(data) {
alert(test);
});
}
Le code alert(test);
imprime uniquement la dernière valeur de test
de la boucle for
. Comment faire pour qu'il imprime la valeur de test
pendant l'appel de la fonction getFileContents
? (Je voudrais le faire sans changer getFileContents
parce qu'il est une fonction d'aide très générale et je ne veux pas faire spécifique en passant une variable spécifique comme test
à elle.
Voir aussi: http://stackoverflow.com/questions/tagged/javascript+closures+loops – CMS