2012-11-20 47 views
2

我提出那是讓我失去了我的腦海的一個問題。 我需要爲下發展協同瀏覽小服務程序,其邏輯是: 「主」類型的地址欄的地址,以及POST方法(形式)將該信息發送給servlet。jQuery的 - 負載POST響應到IFRAME

servlet通過對象HttpGet獲取請求的資源並添加一個標籤來解決由於相關鏈接而引起的任何問題。

則返回的資源被顯示在IFRAME(搜索欄的形式有作爲目標的iframe)

當我在iframe中的頁面上的任何鏈接,點擊該鏈接的作用,使用jQuery ,被阻止(event.prevent()),並且在它的位置將被髮送POST更新頁面中顯示的頁面。

更新工作正常,servlet正常工作,事實上POST響應包含所請求頁面的html。

現在的問題:我如何在iframe顯示呢?

我試着用:

$('.myIframe').contents().load("myServlet", {someParameters}); 

,並用:

$.post("myServlet", {someParameters}).success(function(data) { 
$(".myIframe").contents().html(data);}); 

但在這兩種情況下,我收到正確的響應(HTML),但iframe是空的。 此外,在這些情況下,瀏覽器無法解析相對鏈接(與螢火相對鏈接不符合所引用的資源需求,並收到404響應),雖然在第一次調用(地址欄)的工作。

有什麼想法?

P.S.對不起我的英語不好!

的HTML代碼是:

<div id="searchbar"> 
<form action="myServlet" target="navigation" name="form" method="POST"> 
<input type="text" name="goTo" id="addressbar"> 
</form></div> 
<div id="iframe"><iframe class="myIframe" scrolling="no" name="navigation"></iframe> 

和被加載的iframe時,在鏈路上每次點擊通過公認:

$('.myIframe').load(function() { 
    $('.myIframe').contents().find('a').click(function(event) { 
     $('html', $('.myIframe').contents()).load("myServlet", {someParameters}); 
    }); 
}); 

數據的在後響應獲得的類型是典型的Web資源(你會得到瀏覽servlet的協同瀏覽之外的相同 - HTML,ASP,PHP等)

@Yevgeniy:嗨,它的工作原理,但現在,這種方式加載頁面時,未啓用點擊鏈接(iframe load()事件未被觸發的事件識別?)

一些更新 我通過走散POST(其中更新會話協同瀏覽)的作用(而不是異步地獲取資源會話,並應表現出的iframe)

柱一側是好的,

異步GET使用AsyncContext實現這個JS(甲骨文教程):

var messagesWaiting = false;   
function getMessages(){ 
    if(!messagesWaiting){ 
     messagesWaiting = true; 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange=function(){ 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
       messagesWaiting = false; 
       var iframe = $(".browser")[0].contentWindow.document; 
       iframe.open(); 
       iframe.write(xmlhttp.responseText); 
       iframe.close(); 
      } 
     } 
     xmlhttp.open("GET", "CoBroServlet?t="+new Date()+"&type=UPDATE&sharedSessionId="+ document.getElementById("ssid").innerHTML, true); 
    xmlhttp.send(); 
    } 
} 
setInterval(getMessages, 1000); 

奇怪的是,在某些情況下,它工作正常,但在其他情況下,包含GET的全部內容遠程資源在屏幕上被打印爲「原始」(它不會放入嵌套在iframe中的#document中,但在之間)

更好地解釋: 有時(總是以地址欄中的第一個搜索爲例)firebug顯示內容iframe是預期的。 通過iframe與servlet交互瀏覽網站並輸出正常。

突然(在地址欄中進行新的搜索)iframe輸出GET響應的內容。

從這時起,在第一個站點(運行良好的站點)的地址欄中重複搜索將被打印到頁面的原始html頁面。

我也嘗試用$('。MyIframe)清除iframe中getMessages函數()的每個新週期。空(),但我沒有任何不同!

+0

我們可以看到您的html代碼 –

+0

發佈更多信息,比如您的html,正在返回什麼類型的數據等 –

回答

0

我解決它通過傳遞編碼爲請求的路徑參數,只是要更換的iframe src屬性:

$(".myIframe").attr('src', "myServlet/"+encodedParam); 

感謝所有

0

請修改您的JavaScript這樣的,然後再試一次:

$('html', $('.myIframe').contents()).load("myServlet", {someParameters});