使用javascript重新加载iframe时将变量传递给jsp

时间:2010-04-28 18:53:30

标签: javascript jsp iframe reload

在我的javascript代码中,我在iframe中加载了一个jsp页面并传递了一些这样的变量:

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();

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

它应该没有任何区别,但我正在使用jquery,这是一个Yahoo zimlet。

感谢。

1 个答案:

答案 0 :(得分:2)

'accord'变量如何得到'更新'?目前您只是重新加载第一次构建的相同URL;如果JavaScript accord变量已更改,并且您想更改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编码。)