JS сохранить GET запрос после замены истории, при перезагрузке страницы

248
14 апреля 2017, 22:41

Здравствуйте. Возможно ли сохранить GET при перезагрузке страницы после изменения истории:

history.replaceState(null, '', location.pathname); 

dp/aaa/bbb?A=1 адрес без get выглядит лаконичней dp/aaa/bbb, но после перезагрузки как и должно быть get запроса нет. Возможно ли эти параметры сохранить?

Answer 1

Как вариант можно сохранить это в cookie Получите ваши параметры с помощью location.search:

window.location.search

запишите их в куки

document.cookie = "name=Vasya";

а при загрузке страницы получение куки

function getCookie(name) {
  var matches = document.cookie.match(new RegExp(
      "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=
    ([^;]*)"
 )); return matches ? decodeURIComponent(matches[1]) : undefined;}

Так Вы сможете сохранить эти параметры запроса внутри браузера, но сами данные не сохранятся. Как вариант, можно использовать вместо cookie использовать localStorage

Answer 2

Решил задачу так:

/**
* GETRequest - сохраненный get запрос
* GETPath - страница которой принадлежит сохраненный get
*/
(function () {
  // если нет get запроса и какой-то запрос сохранен
  if(window.sessionStorage.GETRequest && window.location.search==""){
      // если юзер обновил страницу а не перешел на другую
      if(window.location.pathname == window.sessionStorage.GETPath){
        var GETRequest = window.sessionStorage.GETRequest;
        window.sessionStorage.clear();
        window.location.assign(window.location.pathname+GETRequest);
      }else{
        window.sessionStorage.clear();
      }
   }
}());
//если передан определенный запрос с необходимым параметром
<?if($param['val']==(int)1):?>
    <script>
        // записываются параметры запроса и страница 
        window.sessionStorage.setItem('GETRequest', window.location.search);
        window.sessionStorage.setItem('GETPath', window.location.pathname);
        // убирает запрос и адресной строки
        window.history.replaceState(null, null, window.location.pathname);
    </script>
<?else:?> // если запрос не валидный
    <script>
        window.sessionStorage.clear();
        window.history.replaceState(null, null, window.location.pathname);
    </script>
<?endif;?>

Правда есть ощущение что window.location.assign(window.location.pathname+GETRequest); можно сделать лаконичней без перезагрузки страницы.

READ ALSO
Не могу передать изображения на сервер

Не могу передать изображения на сервер

Есть несколько полей такого типа <input type="file" name="file1">в которых я выбираю изображенияМне нужно с помощью ajax залить их на imgur, а ссылку вернуть...

240
Как обернуть каждый элемент в контейнер jQuery

Как обернуть каждый элемент в контейнер jQuery

Мне нужно выбрать все элементы a обернуть кадлый из них в li и добавить в ul с id="menu"

263
Выводить страницу оплаты в iframe

Выводить страницу оплаты в iframe

Есть форма с данными, которая автоматически при нажатии кнопки submit отправляется на сайт robokassa (в action у формы стоит ссылка на страницу оплаты)Как...

201