我有点困惑:
如果我制作:
$.get('http://externhost/somefile.js', callback, 'text');
我得到了:
XMLHttpRequest cannot load http://externhost/somefile.js. Origin http://www.myhost.at is not allowed by Access-Control-Allow-Origin.
但如果我提出以下请求,我就没有问题,而且一切都正确:
$.get('http://externhost/somefile.js', callback, 'script');
我不知道为什么这适用于数据类型脚本,但不适用于text/html/json。
看起来您正试图从外部资源加载脚本。这可能是潜在的危险,因此您无法加载外部资源,原因如下:
想象一下,你正在检查你的ebay账户上的一些东西。然后在另一个选项卡中,你打开我的网站,在那里我有一个脚本,向ebay发出一系列请求(你仍然登录),并在你没有注意到的情况下出价购买奥迪A8。烦人的如果是你的银行,它可以直接从你那里偷钱。
我不会试图解释为什么您的脚本加载失败,除了注意显而易见的一点:您试图将JavaScript文件加载为纯文本。jQuery通过在文档中添加一个具有给定src
属性的script
元素,可能是在悄悄地破坏限制。当我做同样的事情(使用从谷歌代码加载的prototype.js)时,看看我的文档,事情就是这样。
这里的底线是,你想做什么?如果您试图加载JavaScript文档,请使用.getScript()
方法。这将实质上创建一个具有给定源的新脚本元素,并加载到外部文档中。如果您尝试使用JSON,请改用.getJSON()
方法,但请注意,这是您必须绕过跨站点脚本障碍的地方,可以使用JSONP(请参阅getJSON()
文档和此处),也可以设置适当的HTTP访问控制(CORS),前提是您拥有服务器,如下所示:
Access-Control-Allow-Origin: http://yoursite.com