刷新时重定向到不同的URL

时间:2018-06-12 20:06:44

标签: javascript php jquery laravel

我的创建产品页面包含“/ product / create”等网址。

它有多个关于该产品各种类别的标签。提交tab-1数据(使用AJAX)时,会在服务器端创建产品(存储在DB中),但URL仍为“/ product / create”。

如果此用户在创建产品后尝试重新加载页面(即在tab-1上第一次AJAX调用之后),我想将此用户重定向到“/ product / {product_id}”。其余选项卡可能有多个AJAX请求。

我尝试使用闪存数据但在后续的AJAX请求中丢失了。

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

有没有办法在下次重新加载之前保留数据,并在创建该产品时重定向到编辑路由?或者我的问题的任何其他可能的解决方案。

3 个答案:

答案 0 :(得分:0)

我不确定这是否是最优雅的解决方案,但对于Chrome,您可以使用localStorage功能。例如:

if (typeof localStorage.getItem('visited') != 'string') {
  localStorage.setItem('visited', 'anything here');
} else {
  localStorage.removeItem('visited');
  window.location.href = 'https://www.example.com';
}

答案 1 :(得分:0)

您是否尝试在创建产品时重定向用户?

在JavaScript中,假设产品ID位于名为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 Documentation for PushState

答案 2 :(得分:0)

我认为,因为您使用AJAX进行提交,所以最好的方法是确保使用AJAX响应返回{product_id},这样您就可以构建刷新链接。在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本地存储项。