2012-11-20 50 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});