Uncaught ReferenceError:foobar n'est pas défini (fonction anonyme)
J'ai ce fichier js servant de du domaine dire foobar.com
at http://foobar.com/static/js/main.js:
$(document).ready(function() {
function foobar(bar){
$.ajax({
url: "/site/foo/",
data: {'foo':bar},
dataType: "jsonp",
crossdomain: !0,
success: function (data) {
alert(data);
},
error: function () {
}
})
}
});
Sur barfoo.com
sur certaines url, j'ai quelque chose comme ceci:
<script src='http://foobar.com/static/js/main.js' type='text/javascript'></script>
<script type='text/javascript'>foobar('123456')</script>
Lorsque je tape l'url : il est dit
Uncaught ReferenceError:foobar is not defined (anonymous function)
Comment accéder à la fonction dans d'autres domaines?
Votre
foobar
n'est pas une fonction globale, de sorte que vous ne pouvez pas invoquer celle-ci comme un...OriginalL'auteur Tauquir | 2011-12-19
Vous devez vous connecter pour publier un commentaire.
Vous avez défini un "foobar()" à l'intérieur du "prêt" de gestionnaire. C'est donc une variable locale à la fonction, et invisible de l'extérieur.
Vous pouvez ajouter ceci à la fin de l' "prêt" gestionnaire:
et puis ce serait visible à l'échelle mondiale.
Par la manière, c'est quelque chose qui peut mordre, à jsfiddle parce que c' (par défaut) est renvoyé à la ligne de code dans une "charge" de gestionnaire. Ainsi, si vous copier/coller à partir d'un fichier JavaScript inclus dans le
<head>
, une fonction qui serait mondial dans ce contexte finit pas global du violon.Bien @Tauquir il pourrait y avoir des effets secondaires si le nom de la fonction entre en collision avec un autre
window
de la propriété.vous pouvez déclarer la fonction à l'extérieur de $(document).ready(function() {
+1 pour jsfiddle mise en garde
OriginalL'auteur Pointy
Votre fonction n'est pas visible à l'échelle mondiale comme l'a souligné Pointu. Mais vous êtes aussi le chargement d'un script et l'appel d'une fonction définie par l'
ready()
fonction. Je suppose que c'est possibleready()
peut ne pas avoir été appelé lors de vos appels de scriptfoobar()
qui génère la même erreur. Je vous recommande de définir une valeur dans votre script, et ensuite utiliser cette variable dans l'ready()
fonction.Définir la valeur dans le script:
Alors vous pouvez l'utiliser dans le
ready()
fonction.Si vous souhaitez définir une fonction de sorte que vous pouvez l'utiliser de nouveau, vous pouvez l'appeler dans
ready()
mais assurez-vous de définir la variable globalebar
à ce que vous voulez.OriginalL'auteur Steve O'Connor