Перезагрузка страницы через AJAX, когда window.location = self.location не работает - PullRequest
9 голосов
/ 08 октября 2008

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

<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="#", мои сценарии больше не будут работать?

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

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

Ответы [ 3 ]

20 голосов
/ 13 октября 2008
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 );

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

1 голос
/ 08 октября 2008

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

0 голосов
/ 20 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...