Могу ли я вызвать полную перезагрузку веб-страницы с содержимым из строки javascript?

Это один из тех вопросов об альтернативном потоке ajax. Обычно я ожидаю, что мой запрос ajax вернет часть страницы. Но иногда он может вернуть полную страницу с тегами html, head и body.

Когда я возвращаюсь из своего ajax-запроса, я могу определить, является ли это полной страницей, но можно ли запустить полную перезагрузку страницы (с полным циклом событий) на основе имеющегося у меня содержимого строки?

(И да, я попытался заменить элемент body, но это не дает мне событий и не позволяет мне изменять содержимое в блоке head)

Любая ссылка на фреймворк в порядке

Разве не было бы лучше просто сгенерировать новый HTML-код на сервере и отправить ответ AJAX с указанием загрузки новой страницы по указанному URL-адресу?

Martin Bøgelund 24.10.2008 11:56

Если я забиваю гвоздь молотком, могу ли я вдруг использовать молоток как отвертку? У инструментов есть применение: когда вы из-за плохого дизайна пытаетесь использовать их в целях, противоположных их предполагаемому использованию, вы неизбежно столкнетесь с проблемами такого рода.

Alexander Morland 24.10.2008 12:12

Реальность кусается. Переадресация в сочетании с дополнительным заголовком - более элегантный способ сделать это.

krosenvold 24.10.2008 12:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 272
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я не думаю, что это возможно сделать напрямую.

Лучше сохранить где-нибудь 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, чтобы указать перенаправление всей страницы.

krosenvold 24.10.2008 12:58

К сожалению, это не работает, поскольку 301/302, похоже, не достигает прототипа (он обрабатывается браузером и никогда не достигает javascript).

krosenvold 27.10.2008 12:58

window.location = "тот же URL-адрес, что и им-at.aspx";

...?

Чтобы сделать это напрямую с HTML-документом, я бы отчаянно попытался избежать, если бы я был вами по причинам, которые вы просмотрели в своем исходном вопросе ...

Другие вопросы по теме