HTML. какая есть альтернатива фреймам?

evgeniy

Есть страничка с меню и контентом. Нужно чтобы обновлялся только контент в зависимости от выбранного пункта меню.
Как это можно сделать, если нельзя использовать фреймы?
Подскажите пожалуйста хороший способ.

SergZ

css
ajax

evgeniy

спасибо, буду использовать ajax.

Missi4ka

если не секрет, почему не хочешь использовать фреймы?

evgeniy

да почитала в инете не очень лестные отзывы
к тому же когда пыталась делать фреймы, то мое выпадающее меню перекрывалось фреймом с контентом. В итоге с начальником было решено отказаться от них вообще и найти какой-то
другой способ.

evgeniy

кстати возник вопрос по ajax, может кто сможет помочь.
Вроде все было нормально: сервлет обрабатывает запрос, возвращает тестовую табличку,
кот обновляется при каждом вызове из меню. А как сделать, когда наряду с табличкой на возвращенной странице будет еще какой нибудь скрипт. Пока не знаю, как его прицепить, чтобы он работал?

pitrik2

не понятен вопрос
спроси поточнее

evgeniy

в общем так:
у меня есть main.jsp вот с таким телом.
<body onload="init">
<div id="menu">
<%@ include file="menu.jsp" %>
</div>
<div id="content</script></div>
</body>
</html>
То есть вверху меню, а во втором слое у меня будет что то генерироваться с помощью сервлета и технологии ajax.
У меня есть скрипт который создает запрос сервлету и получает от него ответ:
Пока у меня в сервлете генерируется вот такая табличка
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
// RequestDispatcher dispatcher = request.getRequestDispatcher("scripts/test/test.js");
// dispatcher.include(request, response);
String table =
" <table>\n" +
" <tr>\n" +
" <td>" + id + "</td>\n" +
" <td>" + id + "</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td>" + id + "</td>\n" +
" <td>" + id + "</td>\n" +
" </tr>\n" +
" </table>";
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter.write(table);
}
А что делать если у меня кроме этой таблички во втором слое будет еще какой нить скрипт?
Как его сгенерить с помощью сервлета? И можно ли вообще такое сделать?
Может не очень понятно написано Пока я в web-проектах новичок

evgeniy

вот скрипт для создания запроса с помощью ajax и его обработки.
<script>
var content;
function getContent(str) {
// content = document.getElementById("content");
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest;
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
url = "content?id=" + str;
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
function callback {
if (req.readyState == 4) {
if (req.status == 200) {
var response = req.responseText;
content.innerHTML = response;
}
}
}
}
function init {
content = document.getElementById("content");
}
</script>

pitrik2

А что делать если у меня кроме этой таблички во втором слое будет еще какой нить скрипт?Как его сгенерить с помощью сервлета? И можно ли вообще такое сделать?
все равно не очень понятен вопрос
ну добавь в переменную table еще данные
table += "еще какой нить скрипт";

evgeniy

пробовала, так не работает .
почему то он не воспринимает скрипт в строке.

pitrik2

что ты называешь скриптом?
вот это?
table += "<script type=\"text/javascript\">alert(\"AJAX forever!\");</script>";

evgeniy

просто нужно, чтобы во втором так сказать слое была не просто какая-то там разметка, а вполне себе полноценная страничка со своими скриптами.

evgeniy

да, именно это

pitrik2

ну дык тут не аджакс виноват
он то данные передает
виноват innerHTML
тестовый пример не работает:
<html><body>
<div id="content"></div>
<script type="text/javascript">
document.getElementById('content').innerHTML = 'UPS <script type="text/javascript">document.write("-");<' + '/script> UPS';
</script>
</body></html>

pitrik2

ИМХО нельзя сделать то что ты хочешь
ajax предназначен для подгрузки данных, а не скриптов

evgeniy


плохо.
надо будет искать еще какой-то выход.

oleg701

А зачем скрипт подгружать именно в div?
Что мешает его написать в отдельном файле .js и загружать вместе со страницей?
Или так уж нужны динамические скрипты?

pitrik2

просто AJAX подразумевает в себе другую организацию странички, другую логику ее написания
тойсть если собираетесь на нем писать, то и мыслить надо по-другому
а тогда подобных вопросов и не возникнет

evgeniy

ну это было бы идеально. Но думаю придется обойтись каким-нить другим способом загрузки скриптов. Пока я еще четко не знаю, как все будет. Как раз ищу ответы на вопросы, что можно а что нельзя.

sbs-66

Поищи в инете инфу про библиотеку prototype.js. Там есть реализация поддержки AJAX с возможностью выполнять подгруженные скрипты. Либо сама копай в направлении eval (innerHTML добавляет скрипты в DOM, но не выполняет их).

ava3443

ajax предназначен для подгрузки данных, а не скриптов
google (точнее gmail) вроде как раз через подгрузку скриптов и работает
и вообще, ботай json
Оставить комментарий
Имя или ник:
Комментарий: