Uncaught ReferenceError: foobar n'est pas défini (fonction anonyme)

J'ai ce service de fichier js provenant de certains domaines, dis 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 une URL, j'ai quelque chose comme ça:

 <script src='http://foobar.com/static/js/main.js' type='text/javascript'></script> <script type='text/javascript'>foobar('123456')</script> 

Quand je frappe cette url: il dit

 Uncaught ReferenceError:foobar is not defined (anonymous function) 

Comment accéder à la fonction à partir d'autres domaines?

Vous avez défini "foobar ()" dans le "ready" handler. C'est donc une variable locale dans cette fonction, et invisible à l'extérieur.

Vous pouvez ajouter ceci à la fin du gestionnaire "prêt":

  window['foobar'] = foobar; 

Et alors il serait visible dans le monde entier.

En passant, c'est quelque chose qui peut mordre à jsfiddle car il (par défaut) enveloppera le code dans un gestionnaire de "charge". Ainsi, si vous copiez / collez à partir d'un fichier JavaScript inclus dans <head> , une fonction qui serait globale dans ce contexte finit n'est pas globale dans le violon.

Votre fonction n'est pas visible dans le monde entier comme indiqué par Pointy. Mais vous chargez également un script et appelez une fonction définie par la fonction ready() . Je suppose qu'il est possible d' ready() peut-être pas appelé lorsque votre script appelle foobar() qui générerait la même erreur. Je vous recommande de définir une valeur globale dans votre script, puis d'utiliser cette variable dans la fonction ready() .

Définissez la valeur dans le script:

 <script src='http://foobar.com/static/js/main.js' type='text/javascript'></script> <script type='text/javascript'>var bar = '123456'</script> 

Ensuite, vous pouvez l'utiliser dans la fonction ready() .

 $(document).ready(function() { $.ajax({ url: "/site/foo/", data: {'foo':bar}, dataType: "jsonp", crossdomain: !0, success: function (data) { alert(data); }, error: function () { } }); }); 

Si vous souhaitez définir une fonction afin que vous puissiez l'utiliser à nouveau, vous pouvez l'appeler en ready() mais assurez-vous de définir la bar variables globale à ce que vous voulez.

 window.foobar = function() { $.ajax({ url: "/site/foo/", data: {'foo':bar}, dataType: "jsonp", crossdomain: !0, success: function (data) { alert(data); }, error: function () { } }); } $(document).ready(function() { foobar(); // other stuff });