2011-07-23 15 views
0

假設我有page1.html,並且這是等待看到我的人的一個隊列列表。用於刷新外部呼叫頁面的XMLHttpRequest

我有權訪問page2.html,我使用它來查看列表並調用特定的人員。當我點擊page2.html上的名稱時,page1.html應該爲該人的姓名添加一個類(使用css3動畫使其閃爍)。

這個例子是蹩腳的,但你得到了我想要做的事情......我已經讀了一點關於XMLHttpRequests和'onreadystatechange',但我不確定這是如何工作的...

想法......

回答

0

你可以做的是使用XMLHttpRequest從您的page1.html加載數據,並相應地對你page2.html顯示。您將不得不使用第2頁上的請求並返回第1頁上的數據。

您可以將page2視爲您的前端或客戶端,您必須解釋信息並將其顯示(在您的示例中顯示列表並更改人員的類別),而page1是您提供信息的後端爲你的page2。

有關的XMLHttpRequest或進一步信息的概念,它的使用,我建議你看看這裏的例子:https://developer.mozilla.org/en/AJAX

+0

是的,你似乎明白這個問題,但事情是,我不能設置一個循環,並期望page1.html不斷地持續檢查「嘿,你有沒有改變?」...有沒有替代方案?有什麼事讓我編碼Page2.html與改變發生時與Page1.html溝通? – Abhishek

+0

只有JavaScript和HTML,您沒有該選項。該檢查必須由用戶的瀏覽器啓動。您可以通過使用setInterval()每隔一段時間調用一次page1並獲取數據來實現該功能。其他選項取決於您可以使用的其他技術。這裏有一些鏈接給你一個想法:http://stackoverflow.com/questions/tagged/comet,http://stackoverflow.com/questions/4074569/ – Dan

0

據我知道你想,當你點擊人的Page2上名字來更新第1頁。我認爲這裏有一些情況:

  1. page2是dialog window。當你點擊一個名字時,它可以直接在頁面1上操作。這裏不需要XMLHttpRequest。
  2. page2是一個彈出式窗口。差不多一樣。這article可能會幫助你這個。
  3. page2是一個獨立頁面,位於不同的選項卡/窗口中。這裏你需要一個ajax(XMLHttpRequest)。當你點擊名稱,這個動作應該是寫的什麼地方(服務器端,SQL或東西),和第1頁應該檢查在一些時間間隔進行任何更改。
+0

我想避免時間間隔分離的請求......這本質上是使客戶端每5秒鐘與服務器進行通信(例如)詢問「嘿,你有沒有改變?」。我不能以其他方式獲取某些通信處於靜默狀態的內容,直到數據庫更新,然後與調用各種活動會話更新的父功能取得聯繫嗎? – Abhishek

+0

@Abhishek你必須使用前兩個選項之一。沒有刷新頁面或ajax調用,這是方式。 – Bakudan

1

我想你可以不喜歡這樣。當你點擊一個人的名字時,讓你的page2.html更新一個數據庫。你可以在你自己的名字點擊page2.html

現在在另一端的那個人在你的數據庫的標誌讓你在page1.html在JavaScript循環後臺持續查詢數據庫。在請求從數據庫中的信息,您可以相應地更新page1.html

我希望你能得到它。請讓我知道是否有任何迴路孔。

此鏈接可能會有所幫助:PHP long polling, without excessive database access

+0

嘿,是的......一個JS(AJAX)循環確實發生在我身上,但你看,我不想要一個「積極的解決方案」,一直不斷困擾着服務器的東西......如果有一百萬最終用戶,他們每個人都會向服務器發送呼叫,這將會加載服務器......是不是有一個被動的解決方案?也許一些甚至不需要數據庫? – Abhishek

+1

@Abhishek - 我已經用你可能對你有幫助的鏈接更新了我的答案 –

+0

是的,長輪詢是我找到的解決方案之一......但是我最終使用了HTML5的服務器發送的事件...更多信息在我自己的答案中...:-S – Abhishek

0

我沒有得到一個公平的一些反應,而他們中的大多數需要不斷的JavaScript執行ping或有點迂迴的方法(如反向AJAX或者COMET,長輪詢,等等),他們都解決了這個問題。

儘管如此,一點點額外的挖掘,我發現高科技的金塊完全適合:

HTML5的服務器發送的事件 (HTTP://dev.w3。org/html5/eventsource /)

這允許客戶端聲明自己是來自服務器的通信的「接收者」,有效地顛倒了Web技術中占主導地位的'先請求,後服務'方法。服務器可以啓動與客戶端的通信,而不需要初始請求,允許我在客戶端可用時(例如數據庫更改)將更新推送到客戶端。