Передача переменной в jsp при перезагрузке iframe с использованием javascript - PullRequest
1 голос
/ 28 апреля 2010

В моем коде JavaScript я загружаю страницу jsp в iframe и передаю некоторые переменные, подобные этой:

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 Yahoo.

Спасибо.

1 Ответ

2 голосов
/ 28 апреля 2010

Как переменная «accord» обновляется? В настоящий момент вы просто перезагружаете тот же URL, который создали в первый раз; если переменная 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, и его лучше избегать. Кроме того, если вам нужно создать свой iframe, соединив HTML-код, вам потребуется HTML-экранирование URL-адреса перед включением его в разметку. В противном случае символы & в 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.)

...