【问题标题】:why my JS can't load document from another server?为什么我的 JS 无法从另一台服务器加载文档?
【发布时间】:2011-03-11 11:11:54
【问题描述】:

我有两个网站和两个文件:

provider.com/provide.js
viewer.com/index.html

viewer.com/index.html 将信息呈现给用户,并从provider.com 获取此信息。文件viewer.com/index.html 看起来像这样(使用jQuery):

<script type="text/javascript"
src="http://provider.com/provide.js"></script>
<script type="text/javascript">
  provide(function() { alert('works!'); });
</script>

provider.com/provide.js 看起来像这样(我省略了不必要的细节):

function provide(callback)
{
  $.ajax(
    {
      'url': 'http://provider.com/',
    }
  );
}

我在所有浏览器中都收到此消息:Failed to load resource: cancelled

我感觉我打破了一些安全限制。任何人都可以解释什么限制,如果有的话。谢谢。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    虽然 provide.js 文件是从提供者域加载的,但它仍然是在 HTML 页面的上下文中加载的,因此它位于查看器域中。当代码尝试进行 AJAX 调用以从提供程序域获取信息时,您会遇到跨域限制。

    您不能使用 AJAX 跨域加载信息。但是你可以使用 JSONP 作为数据格式,那么ajax 方法不会进行 AJAX 调用,而是使用脚本标签来加载信息,这是允许的。

    【讨论】:

    • 那么,他应该在 $.ajax 调用中添加 dataType:'jsonp',对吧?
    • @Alex:是的。此外,服务器返回的内容当然必须是 JSONP 格式。
    【解决方案2】:

    对于security reasons,您不能请求 Javascript 来跨域发送请求。

    但是,您可以向服务器发出请求,该服务器可以检索文件并为您打印结果,然后 Javascript 可以请求。

    【讨论】:

      【解决方案3】:

      其他答案中描述的同源策略的简要介绍,可以在这里找到:

      http://en.wikipedia.org/wiki/Same_origin_policy

      【讨论】:

        猜你喜欢
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-17
        • 2013-08-21
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        相关资源
        最近更新 更多