Перезагрузка страницы через AJAX, когда window.location = self.location не работает

StackOverflow https://stackoverflow.com/questions/181132

Вопрос

На моей домашней странице я получил:

<ul id="login">
  <li> <a id="loginswitch" href="./login-page">log-in</a> | </li>
  <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li>
</ul>

Через MooTools я получаю эти якорные элементы по идентификатору, так что после того, как они будут нажаты, под ними появится всплывающее окно div, содержащее форму входа или регистрации (конечно, с методами для остановки распространения событий) и после заполнения полей запускается вызов AJAX - это должно создать сеанс и перезагрузить страницу, чтобы у пользователя было визуальное изображение, что он теперь вошел в систему, и появились элементы управления уровня пользователя и т. д.

Вызов ajax инициируется классом AJAX MooTools, а для параметра evalScripts установлено значение true. Страница AJAX возвращает код скрипта:

<script type="text/javascript">window.location = self.location;</script>

Эта система работает отлично - теперь мне интересно, почему, если я изменю значения href якорей на href = " # " , мои сценарии не будут работать больше?

Это имеет какое-либо отношение к окну?

Изменил ли он свое свойство, когда я нажал на ссылку или около того, даже когда распространение события было остановлено?

Это было полезно?

Решение

window.location = self.location;

Этот javascript выполняется .

Когда он выполняется, браузеру говорят заменить значение window.location новым значением. Не все браузеры будут реагировать одинаково. Некоторые из них, вероятно, будут работать так, как вы ожидаете, но другие проявят смекалку и сравнят два значения. Браузер знает , на какой странице он находится, и знает, что вы просто просите перейти на ту же страницу.

Кэш браузера

В браузере даже есть копия вашей текущей страницы в кэше . Он может поговорить с сервером и спросить, действительна ли его страница в кеше. Если кеш действителен, он может решить не вызывать перезагрузку страницы. За кулисами это происходит с заголовками HTTP. Браузеры и серверы могут общаться по HTTP разными способами. В этом случае ваш браузер отправляет быстрый запрос на сервер, говоря что-то вроде этого:

GET /stackoverflow.com/posts/196643/index.html
HTTP/1.1
Host: www.stackoverflow.com
User-Agent: Mozilla/5.0
If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT

Это называется условным GET-запросом . Сказав If-Modified-Since , ваш браузер говорит: «Дайте мне этот файл, но только если он был изменен с тех пор, как я в последний раз видел его.»

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

Вот как вы можете:

location.reload( true );

" правда " необязательный параметр для принудительной перезагрузки . Браузер даже не будет смотреть на кеш. Он будет делать то, что вы говорите.

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

Переход к якору на странице - что означает # - не требует перезагрузки.

Если бы они передали мне это конкретное задание на работе, я бы вернул его обратно дизайну. Если мы не говорим о защищенной странице или входе в систему OpenID, вы не должны открывать форму входа или входа. Пользователи должны научиться искать этот https: в верхней части своей страницы и никогда не входить в систему, если они его не видят.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top