0

我有点困惑:

如果我做:

$.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。

4

1 回答 1

1

看起来您正在尝试从外部资源加载脚本。这可能具有潜在危险,因此您无法加载外部资源,例如此处提供的原因:

想象一下,您正在检查您的 ebay 帐户上的一些东西。然后在另一个选项卡中打开我的网站,我有一个脚本向 ebay 发出一系列请求(您仍然登录)并在您甚至没有注意到的情况下为您出价购买奥迪 A8。烦人......如果是你的银行,它可以直接从你那里偷钱。

我不会试图解释为什么你的脚本无法加载,除了注意显而易见的:你正在尝试将 JavaScript 文件加载为纯文本。scriptjQuery 可能通过在文档中添加具有给定src属性的元素来默默地颠覆限制。当我做同样的事情(使用从谷歌代码加载的prototype.js)时查看我的文档,这就是发生的事情。

这里的底线是,你想做什么?如果您尝试加载 JavaScript 文档,请使用该.getScript()方法。这实际上将使用给定的源创建一个新的脚本元素并加载到外部文档中。如果您尝试使用JSON,请改用该.getJSON()方法,但请注意,这是您必须绕过跨站点脚本障碍的地方,要么使用JSONP(请参阅getJSON()文档和此处),要么通过设置适当的HTTP 访问控制 (CORS),前提是您拥有服务器,如下所示:

Access-Control-Allow-Origin: http://yoursite.com
于 2013-07-22T10:18:39.800 回答