2010-04-28 83 views
1

在我的javascript代码重新加载一个iframe,当我在一个iframe加载一个JSP页面,并通过这样的一些变量把jsp:传递变量使用JavaScript

htmlData[i++]="<iframe id=\"mapframe\" frameborder=\"0\" style=\"width:330px;height:300px\" src=\"" + "mapURL.jsp" +"&lat=" + AjxStringUtil.urlComponentEncode("33.65") +"&lng=" + AjxStringUtil.urlComponentEncode("-84.42") +"&accord=" + AjxStringUtil.urlComponentEncode(accord) +"\"></iframe>";

然后,我必须重新加载JSP页面一个动作后,我这样做:

accord = ui.newHeader.text(); document.getElementById('mapframe').contentWindow.location.reload();

重装作品除了“协议”变量没有得到更新。当我从jsp调用它时,它仍然具有它的原始值。如何在重新加载iframe/jsp时传递新值?

它应该没有什么区别,但我正在使用jquery,这是一个雅虎zimlet。

谢谢。

回答

2

'协议'变量如何'更新'?目前,您只需重新载入您第一次建立的相同网址;如果JavaScript accord变量发生了变化,并且您想要更改URL以反映该变量,则必须创建一个新URL并将iframe导航到具有不同accord参数的新页面。

function encodeParameters(o) { 
    var s= []; 
    for (var k in o) 
     if (o.hasOwnProperty(k)) 
      s.push(encodeURIComponent(k)+'='+encodeURIComponent(o[k])); 
    return s.join('&'); 
} 

var accord= ui.newHeader.text(); 
var url= 'mapURL.jsp?'+encodeParameters({ 
    lat: '33.65', lng: '-84.42', accord: accord 
}); 
document.getElementById('mapframe').src= url; 

注意contentWindow历史上是一个IE扩展,更好地避免。另外,如果您必须通过将HTML粘在一起来创建您的iframe,则在将URL包含在标记中之前,您需要使用HTML进行转义。否则,URL中的&字符无效,并且在您按下与HTML实体名称匹配的参数名称时可能会造成麻烦。

function encodeHTML(s) { 
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;'); 
} 

htmlData[i++]= '<iframe id="mapframe" src="'+encodeHTML(url)+'" frameborder="0" style="width:330px;height:300px"></iframe>'; 

(我一般更愿意创建使用DOM方法,元素,以避免明确HTML编码。)

+0

这正是我一直在寻找,谢谢! – Vee 2010-04-28 20:15:26

+0

0票的正确答案不正确.. +1 :) – BalusC 2010-04-28 20:30:18