【问题标题】:Cross subdomain ajax longpolling跨子域ajax longpolling
【发布时间】:2011-06-26 06:31:24
【问题描述】:

我正在创建一个通知脚本来检查数据库的更改,然后在 javascript 自定义弹出窗口中返回。

我已经成功制作了jquery ajax加载和处理脚本,以及php长轮询页面。 除了持久的请求阻止任何其他 ajax 加载的内容工作之外,所有这些都非常有效。我发现阻止这种情况的方法是将其移至不同的子域。 但是,这会导致 js“同源策略”出现问题,所有可能的方法似乎都不适用于长连接速度,或者其他选项 php 代理在单独的域中失败了。

有没有人有任何想法如何做到这一点,或者有任何帮助。

谢谢

奥利

【问题讨论】:

    标签: php javascript jquery ajax long-polling


    【解决方案1】:

    您可以尝试的另一件事是填充 json。您可以在某个接受 GET 参数的 url 创建一个动态脚本,例如 sub.domain.com/jsonp.php?var=value ,它返回如下内容:

    var response={a:1,b:2}
    

    您可以动态加载<script/> 元素,并以该网址作为源。 jsonp中设置的变量将被其他脚本访问,不受SOP约束。

    【讨论】:

    • 收到响应后能否调用事件?
    • 我想脚本有一个 onload 事件,但这纯粹是猜测。
    • 不适合彗星,因为它在 chrome 中显示恒定的“加载”标志
    【解决方案2】:

    没有办法以简单的方式解决这个问题......我找到的最简单的方法如下:

    创建一个 IFrame(是的,我知道),这个 IFrame 必须加载来自子域 (sub.example.com/base) 的页面

    主页面和加载在 IFrame 中的页面都必须将 document.domain 设置为 '.example.com' 在此之后您将能够

    1. 在不占用两个域连接之一的情况下从 IFrame 进行长轮询
    2. 在主页面和 IFrame 之间进行通信,因此您可以让 IFrame 进行长轮询,然后调用父级回调

    这也解决了您稍后会遇到的另一个问题,即浏览器在第一次长轮询完成之前一直旋转轮子旋转......

    【讨论】:

    • 我查看了一些 iframe 解决方案,但是当我尝试完成一项工作时,加载循环始终显示在 iframe 加载之前,有什么方法可以隐藏这种反应吗?
    • 据我所知,如果长轮询是从 IFrame 完成的,您应该不会遇到旋转问题。尝试延迟长轮询的开始......在文档就绪事件中触发它......
    猜你喜欢
    • 2012-02-08
    • 2013-06-03
    • 2012-03-02
    • 2012-04-22
    • 1970-01-01
    • 2011-03-31
    • 2013-06-04
    • 2015-10-06
    相关资源
    最近更新 更多