Замените HTML-страницу содержимым, полученным через AJAX

У меня есть HTML-страница с типичной структурой:

<html>
  <head>
   <script src="..." ></script>
   <style>...</style>
  </head>
  <body>
   content
  </body>
  <script>
    var success_callback = function(data) {
      // REPLACE PAGE CONTENT & STRUCTURE WITH "data"
    }
    ajax(url, params, success_callback);
  </script>
</html>

Как вы думаете, это возможно? Я уже пытался дать тегу html идентификатор и сделать $(id).replace(data); без успеха.

Не спрашивайте меня, почему, но это то, что мне нужно (я работаю со специальным сайтом "mashup builder"... это долгая история).

EDIT. Я забыл сказать, что сценарии в полученном контенте должны быть выполнены, даже внешние скрипты, включенные с помощью <script src="...">.

Ответ 1

попробуйте это с помощью jQuery:

$('body').load( url,[data],[callback] );

Подробнее на docs.jquery.com/Ajax/load

Ответ 2

Самый простой способ - установить новый HTML-контент, используя:

document.open();
document.write(newContent);
document.close();

Ответ 3

Здесь, как это сделать в Prototype: $(id).update(data)

И jQuery: $('#id').replaceWith(data)

Но document.getElementById(id).innerHTML=data тоже должен работать.

EDIT: Prototype и jQuery автоматически оценивают сценарии для вас.

Ответ 4

Вы можете попробовать сделать

document.getElementById(id).innerHTML = ajax_response

Ответ 5

Я предполагаю, что вы используете jQuery или что-то подобное. Если вы используете jQuery, тогда должно работать следующее:

<html>
<head>
   <script src="jquery.js" type="text/javascript"></script>
</head>
<body>
   content
</body>
<script type="text/javascript">
   $("body").load(url);
</script>
</html>

Ответ 6

Не можете ли вы просто попытаться заменить содержимое тела обработчиком document.body?

если ваша страница такова:

<html>
<body>
blablabla
<script type="text/javascript">
document.body.innerHTML="hi!";
</script>
</body>
</html>

Просто используйте document.body, чтобы заменить тело.

Это работает для меня. Все содержимое тега BODY заменяется на innerHTML, который вы указываете. Если вам нужно даже изменить тег html и все дочерние элементы, вы должны проверить, какие теги "документа". способны это сделать.

Пример с javascript-скриптом внутри него:

<html>
<body>
blablabla
<script type="text/javascript">
var changeme = "<button onClick=\"document.bgColor = \'#000000\'\">click</button>";
document.body.innerHTML=changeme;
</script>
</body>

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

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

Ответ 7

Самый простой способ:

$("body").html(data);