Это один из тех вопросов об альтернативном потоке ajax. Обычно я ожидаю, что мой запрос ajax вернет часть страницы. Но иногда он может вернуть полную страницу с тегами html, head и body.
Когда я возвращаюсь из своего ajax-запроса, я могу определить, является ли это полной страницей, но можно ли запустить полную перезагрузку страницы (с полным циклом событий) на основе имеющегося у меня содержимого строки?
(И да, я попытался заменить элемент body, но это не дает мне событий и не позволяет мне изменять содержимое в блоке head)
Любая ссылка на фреймворк в порядке
Если я забиваю гвоздь молотком, могу ли я вдруг использовать молоток как отвертку? У инструментов есть применение: когда вы из-за плохого дизайна пытаетесь использовать их в целях, противоположных их предполагаемому использованию, вы неизбежно столкнетесь с проблемами такого рода.
Реальность кусается. Переадресация в сочетании с дополнительным заголовком - более элегантный способ сделать это.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не думаю, что это возможно сделать напрямую.
Лучше сохранить где-нибудь HTML и отправить обратно URL-адрес, по которому его можно будет получить, а затем использовать location.href = ...;
По крайней мере, в Fire Fox вы можете использовать свойство window.location. Объект расположение содержит информацию об URL-адресе документа и предоставляет методы для изменения этого URL-адреса. Вы также можете назначить этому свойству для загрузки другого URL-адреса.
Пример из документа:
Replace the current document with the one at the given URL:
function goMoz() {
window.location = "http://www.mozilla.org";
}
// in html: <button onclick = "goMoz();">Mozilla</button>
Вы можете решить, что делать со своим Запрос AJAX, на основе его Код состояния HTTP.
Если вы получили 301 («перемещено навсегда»), вы можете выполнить перенаправление с помощью window.location:
new Ajax.Request(url, {
method: 'get',
// status 200: yadaa
onSuccess: function(transport) {
// doSomething
},
// status 301: moved permanently
on301: function(transport){
window.location = transport.responseText;
}
});
Это звучит хорошо, особенно если я использую дополнительное поле заголовка в 302, чтобы указать перенаправление всей страницы.
К сожалению, это не работает, поскольку 301/302, похоже, не достигает прототипа (он обрабатывается браузером и никогда не достигает javascript).
window.location = "тот же URL-адрес, что и им-at.aspx";
...?
Чтобы сделать это напрямую с HTML-документом, я бы отчаянно попытался избежать, если бы я был вами по причинам, которые вы просмотрели в своем исходном вопросе ...
Разве не было бы лучше просто сгенерировать новый HTML-код на сервере и отправить ответ AJAX с указанием загрузки новой страницы по указанному URL-адресу?