【问题标题】:Ajax calls to subdomain对子域的 Ajax 调用
【发布时间】:2010-06-28 14:18:22
【问题描述】:

我在 example.com 上有一台运行 apache 的服务器,为我的静态 html 文件提供服务。

我还有一个位于 api.example.com 的 json 服务,它使用cherrypy 运行 python。

用户请求 example.com 并获取 index html 页面。在该页面上,我使用 jquery 向 json 服务发出 ajax 请求。 document.domain 返回example.com

        $.ajax({
        type: 'GET',
        url: 'http://api.example.com/resource/',
        dataType: 'json',
        success: successCallback,
        error: errorHandler
    });

但是,我在 firebug 中看不到 ajax 请求的响应正文。这让我相信浏览器(FF)不支持这个。

实现这一目标的最佳方法是什么?如果可能的话,我不希望在 example.com 的 apache 后端使用任何代理。

【问题讨论】:

  • 不同的子域 = 不同的域
  • 是的。但是example.com是api.example.com的父域,所以这些url之间的关系应该是父-子而不是子-子。

标签: javascript xmlhttprequest cherrypy


【解决方案1】:

您也可以通过添加 callback=? 来使用JSONP到网址的末尾。 jQuery 已经知道如何处理这些类型的请求,但它确实需要一些服务器端更改来处理回调参数。

【讨论】:

    【解决方案2】:

    AJAX 请求仅在同一个域上受支持。但是,您可以使用首选脚本语言编写 http 代理并调用该 http 代理。您可以在用 php 编写的 AJAX 代理上查看这个小 tutorial

    【讨论】:

      【解决方案3】:

      尝试在您的子域中更改您的域,像这样

      <script type="text/javascript">    
        document.domain = 'example.com';
      </script>
      

      如果不起作用,请在您的域页面中更改您的 document.domain。

      【讨论】:

        【解决方案4】:

        据我所知,不能做AJAX跨域。

        Why is cross-domain Ajax a security concern?

        虽然我猜你可以做一个 IFRAME 解决方法

        Cross Sub Domain Javascript

        【讨论】:

        【解决方案5】:

        使用 document.domain 使域成为顶级域而不是子域。

        document.domain="example.com"
        

        这是 MDN 上的 described in detail

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-08
          • 1970-01-01
          • 1970-01-01
          • 2013-03-06
          • 1970-01-01
          • 2011-02-03
          • 2010-10-13
          • 1970-01-01
          相关资源
          最近更新 更多