我的创建产品页面包含“/ product / create”等网址。
它有多个关于该产品各种类别的标签。提交tab-1数据(使用AJAX)时,会在服务器端创建产品(存储在DB中),但URL仍为“/ product / create”。
如果此用户在创建产品后尝试重新加载页面(即在tab-1上第一次AJAX调用之后),我想将此用户重定向到“/ product / {product_id}”。其余选项卡可能有多个AJAX请求。
我尝试使用闪存数据但在后续的AJAX请求中丢失了。
session()->flash('foo','bar');
有没有办法在下次重新加载之前保留数据,并在创建该产品时重定向到编辑路由?或者我的问题的任何其他可能的解决方案。
答案 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本地存储项。