2010-04-28 82 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