2011-02-12 104 views
3

我正在创建一个通知脚本,用于检查数据库中的更改并返回,然后在JavaScript自定义弹出框中显示。跨子域ajax longpolling

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

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

感谢

奥利

回答

0

你可以尝试的另一件事情是填充JSON。你可以在某个URL,它接受GET参数,如sub.domain.com/jsonp.php?var=value返回像创建一个动态脚本:

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

而且你可以动态加载与一个<script/>元素网址作为来源。其他脚本可以访问jsonp中设置的变量,并且不受SOP约束。

0

有没有办法在一个简单的方法解决这个....,我发现最简单的方法是:

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

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

  1. 建立从IFrame的长轮询没有occupiying两个域连接
  2. 沟通的主面和iframe之间的一个,所以你可以离开的iframe长轮询,然后调用回调到父

这也解决了,你以后将有另一个问题,是浏览器装载仪纺车纺纱,直到第一长轮询完成....

+0

我看了一些iframe的解决方案,但是当我试图做一个工作的加载循环始终仍然apeared直到iframe加载有没有办法隐藏这种反应? – Olirav 2011-02-13 16:57:14

+0

从我所知道的情况来看,如果长轮询是从IFrame完成的,你不应该遇到旋转问题。尝试延迟长轮询的开始...在文件准备好的事件中启动它.. – 2011-02-13 18:46:44