代码之家  ›  专栏  ›  技术社区  ›  Johannes Charra

Ajax:重定向问题

  •  1
  • Johannes Charra  · 技术社区  · 15 年前

    这是我第一次使用Ajax,我想在其他静态页面www.xyz.org/some_site.html上执行以下操作:

    • 将获取请求发送到其他URL "www.xyz.org/testscript"
    • 如果响应有 status code != 200 content != 'ok' 什么也不做
    • 其他:在网站上包括某物(即 style="display:block" 在以前的元素上 "display:none" )

    我已经使用基本的Ajax成功地实现了这一点。但是:

    安装的Apache重定向指向 www.xyz.org/testscript subdomain.xyz.org/testscript ,实际testscript所在的URL(因为Ajax不支持跨域调用,甚至不支持子域afaik)。

    当我调用www.xyz.org/testscript时,我得到一个 302 状态代码,内容显示“文档已移动到此处:subdomain.xyz.org/testscript”。

    如何获取“最终”返回值?

    我想/希望任何Ajax专家都能给我一行代码来解决这个问题…

    2 回复  |  直到 15 年前
        1
  •  3
  •   Marius    15 年前

    Ajax(或者xmlhttpRequest是Acurate)不会被重定向欺骗。为了能够从另一个域获取内容,您需要在服务器上使用代理。下面是一个简单的PHP代理:

    if(strpos($_GET['q'], "http://") === 0){
      echo file_get_contents($_GET['q']);
    }
    

    这样使用:

    xhr.open(GET, "www.xyz.org/proxy.php?q=subdomain.xyz.org/testscript", true);
    
        2
  •  0
  •   Johannes Charra    15 年前

    根据上述评论,答案是:

    我不可能实现我想做的,因为Ajax不能被欺骗来跟踪重定向。

    编辑:我试图通过添加另一个javascript文件来解决这个问题。 subdomain.xyz.org/another.js 并将静态HTML站点中的所有Ajax代码放入其中。

    然后,在静态HTML站点上,我用一个普通的

    <script src="subdomain.xyz.org/another.js">

    标签。但这也行不通…欺骗自己:在我的静态页面上包含javascript会再次导致原始问题(禁止跨域调用)。