2011-02-12 67 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