1

在我的 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,这是一个雅虎 zimlet。

谢谢。

4

1 回答 1

2

“accord”变量是如何“更新”的?目前,您只是重新加载第一次构建的相同 URL;如果 JavaScriptaccord变量已更改并且您希望更改 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;

NotecontentWindow在历史上是一个 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 编码。)

于 2010-04-28T19:12:38.523 回答