未捕获的ReferenceError:未定义foobar(匿名函数)

我有一些来自某个域的js文件说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 () { } }) } }); 

barfoo.com上的一些url,我有这样的事情:

  foobar('123456') 

当我点击那个url时:它说

 Uncaught ReferenceError:foobar is not defined (anonymous function) 

如何从其他域访问function?

你已经在“ready”处理程序中定义了“foobar()”。 因此它是该函数中的局部变量,并且在其外部是不可见的。

您可以将其添加到“ready”处理程序的末尾:

  window['foobar'] = foobar; 

然后它在全球范围内可见。

顺便说一句,这是可以咬jsfiddle的东西,因为它(默认情况下)将代码包装在“加载”处理程序中。 因此,如果您从包含的JavaScript文件进行复制/粘贴,那么在该上下文中将是全局的函数最终不会成为小提琴中的全局函数。

Pointy指出,你的function在全球范围内是不可见的。 但是您也在加载脚本并调用ready()函数定义的函数。 我foobar()你的脚本调用foobar()会产生相同的错误时,可能没有调用ready() 。 我建议你在脚本中设置一个全局值,然后在ready()函数中使用该变量。

在脚本中设置值:

   

然后你可以在ready()函数中使用它。

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

如果要定义一个函数以便再次使用它,可以在ready()调用它,但请确保将全局变量bar设置为您想要的值。

 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 });