2010-04-28 3 views
1

Dans mon code javascript je charger une page jsp dans un iframe et passer certaines variables comme celui-ci:En passant une variable à jsp lors du rechargement d'un iframe en utilisant 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>";

Ensuite, je dois recharger cette page jsp après une action, et je le fais:

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

les travaux de reload sauf que la variable "accord" ne reçoit pas mis à jour. Quand je l'appelle du jsp, il a toujours sa valeur d'origine. Comment puis-je passer la nouvelle valeur lors du rechargement de l'iframe/jsp?

Cela ne devrait pas faire de différence, mais je travaille avec jquery et c'est pour un zimlet Yahoo.

Merci.

Répondre

2

Comment la variable 'accord' est-elle 'mise à jour'? Pour l'instant, vous rechargez simplement la même URL que celle que vous avez créée la première fois; Si la variable JavaScript accord a changé et que vous souhaitez modifier l'URL pour refléter cela, vous devez créer une nouvelle URL et naviguer le iframe vers la nouvelle page avec le paramètre accord différent.

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; 

Remarque contentWindow est historiquement une extension IE, et mieux éviter. De même, si vous devez créer votre iframe en collant du HTML ensemble, vous devrez échapper HTML avant de l'inclure dans le balisage. Sinon, les caractères & de l'URL ne sont pas valides et risquent de provoquer des problèmes lorsque vous tapez un nom de paramètre correspondant à un nom d'entité 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>'; 

(je préfère généralement créer des éléments à l'aide des méthodes DOM, pour éviter d'avoir explicitement en code HTML.)

+0

qui est exactement ce que je cherchais, merci! – Vee

+0

Les réponses acceptées avec 0 votes ne semblent pas correctes. +1 :) – BalusC

Questions connexes