Перезагрузка страницы через AJAX, когда window.location = self.location не работает
-
05-07-2019 - |
Вопрос
На моей домашней странице я получил:
<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: в верхней части своей страницы и никогда не входить в систему, если они его не видят.