Когда пользователь посещает мой сайт, на каждой странице есть ссылка "Войти". Нажав на это, вы используете JavaScript, чтобы отобразить окно оверлея, где пользователю предлагается ввести учетные данные. После ввода этих учетных данных на веб-сервер вызывается вызов Ajax для их проверки; если они действительны, файл cookie проверки подлинности отправляется обратно, и страница перезагружается, так что отображается содержимое на странице, которая является специфичной для пользователей, прошедших проверку подлинности, или текущего пользователя (сейчас).
Я выполняю перезагрузку страницы через script, используя:
window.location.reload();
Это прекрасно работает для страниц, загруженных через запрос GET (подавляющее большинство), но на некоторых страницах используются формы обратной передачи. Поэтому, если пользователь переходит на одну из этих страниц, выполняет обратную передачу, а затем выбирает логин, когда запускаются window.location.reload()
script, они запрашивают диалоговое окно с вопросом, хотите ли они повторно отправить тело POST.
Я думал обойти это, я мог просто сказать браузеру перезагрузить страницу, поэтому я попробовал:
window.location.href = window.location.href;
Но браузер не предпринимает никаких действий с указанным выше утверждением, я полагаю, потому что он думает, что новый URL-адрес такой же, как старый. Если я изменю приведенное выше, выполните следующие действия:
window.location.href = window.location.pathname;
Он перезагружает страницу, но я теряю любые параметры запроса.
Мое текущее обходное решение достаточно, но не очень - короче говоря, я привязываю параметр querystring к текущему значению window.location.href
, а затем назначаю его обратно window.location.href
, вызывая reloadPage("justLoggedIn")
, где функция reloadPage
является:
function reloadPage(querystringTackon) {
var currentUrl = window.location.href;
if (querystringTackon != null && querystringTackon.length > 0 && currentUrl.indexOf(querystringTackon) < 0) {
if (currentUrl.indexOf("?") < 0)
currentUrl += "?" + querystringTackon;
else
currentUrl += "&" + querystringTackon;
}
window.location.href = currentUrl;
}
Это работает, но это приводит к тому, что URL www.example.com/SomeFolder/SomePage.aspx?justLoggedIn
, который кажется липким.
Есть ли способ в JavaScript, чтобы заставить его выполнять перезагрузку GET и не запрашивать у пользователя повторную отправку данных POST? Мне нужно убедиться, что любые существующие параметры запроса не потеряны.