Перенаправить на другой URL при обновлении - PullRequest
0 голосов
/ 12 июня 2018

У меня есть страница "Создание продуктов" с URL-адресом, подобным "/ product / create" .

. Здесь есть несколько вкладок о различных категориях этого продукта.Когда данные tab-1 отправляются (с AJAX), продукт создается на стороне сервера (хранится в БД), но URL-адрес по-прежнему «/ product / create».

Я хочу перенаправить этого пользователя на "/ product / {product_id}" , если этот пользователь пытается перезагрузить страницу после создания продукта (т. Е. После первого вызова AJAX на tab-1).Для оставшихся вкладок может быть несколько запросов AJAX.

Я пытался использовать данные, но они теряются при последующих запросах AJAX.

session()->flash('foo','bar');

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

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Вы пытались просто перенаправить пользователя при создании продукта?

В JavaScript, если предположить, что идентификатор продукта находится в переменной с именем product_id, это будет что-то вроде:

window.location.href = "/product/"+product_id;

Если вы не хотите, чтобы страница была перезагружена, используйте PushState

var stateObj = { foo: "bar" }; //Something to the browser to know the state if user go back and forward again
history.pushState(stateObj, "NewTitle", "NewURL");

PushState навигация - это что-то сложное, что нужно добавить на полную веб-страницу, чтобы она выглядела лучше. Документация MDN для PushState

0 голосов
/ 12 июня 2018

Я думаю, что поскольку вы используете AJAX для своих представлений, лучшим способом было бы обеспечить, чтобы ваш {product_id} возвращался с ответом AJAX, чтобы вы могли создавать свои ссылки для обновления.В псевдокоде Javascript (jQuery) это будет выглядеть примерно так:

// AJAX function call to createProduct
function createProduct() {
  $.post('ajax-url-end-point',{payload-data}, function (ajax_response){
    if(response){
       //build your refresh url with response
       var refreshUrl = "http://<domain>/product/"+response.productid;
       localStorage.setItem('refreshUrl', refreshUrl);
       window.location.href = refreshUrl
    }
  },'text');
}

// On reload check for the refreshUrl
$.document.ready(function() {
   if(localStorage.getItem("refreshUrl")){
      window.location.href = localStorage.getItem("refreshUrl");
   }
});

На странице / product / {product_id} вы можете запустить JS, чтобы стереть элемент локального хранилища refreshUrl на основе ваших собственных конкретных критериев.

0 голосов
/ 12 июня 2018

Я не уверен, что это будет самое элегантное решение, но для Chrome вы можете использовать функцию localStorage.Например:

if (typeof localStorage.getItem('visited') != 'string') {
  localStorage.setItem('visited', 'anything here');
} else {
  localStorage.removeItem('visited');
  window.location.href = 'https://www.example.com';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...