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

Tau*_*uir 4 javascript ajax jquery

我有一个来自某个域的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 () {
                    }
                })
        }   
    });
Run Code Online (Sandbox Code Playgroud)

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

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

当我点击那个网址时:它说

Uncaught ReferenceError:foobar is not defined (anonymous function)
Run Code Online (Sandbox Code Playgroud)

如何从其他域访问功能?

Poi*_*nty 11

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

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

  window['foobar'] = foobar;
Run Code Online (Sandbox Code Playgroud)

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

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