跨子域ajax longpolling

时间:2011-02-12 23:56:04

标签: php javascript jquery ajax long-polling

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

我已成功制作了jquery ajax加载和处理脚本,以及php长轮询页面。 所有这一切都很有效,除了持久的请求阻止任何其他ajax加载的内容工作。我发现阻止它的方法是将其移动到不同的子域。 然而,这会导致js“同源策略”出现问题,所有这些可行的方法似乎都不能用于长连接速度,或者其他选项php代理在单独的域中击败了整个点。

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

由于

奥利

2 个答案:

答案 0 :(得分:0)

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

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

主页和IFrame中加载的主页必须将document.domain设置为'.example.com',之后您才能

  1. 从IFrame进行长轮询而不会占用两个域连接之一
  2. 在主页面与IFrame之间进行通信,因此您可以保留IFrame以进行长轮询,然后调用对父级的回调
  3. 这也解决了你以后遇到的另一个问题,那就是浏览器在第一次长轮询结束之前一直在旋转纺车......

答案 1 :(得分:0)

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

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

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