我们一直致力于一个网络应用程序,我们刚刚完成它,但是有一件事困扰着我们(尽管它决不会停止生产。)
当我们调用其中一个页面(index.html)时,我们有时必须在URL(searchid)中传递一个变量。我们得到了一个类似http://domain.com/index.html?searchid=string
的页面。
我们最好不要展示?searchid=string
,但我不确定我们是怎么做的。
我的群组不拥有index.html页面(但我们正在与正在进行的群组合作),因此我不知道我们能够对.htaccess
或类似。
我在考虑POST
变量,但我不知道如何使用HTML和jQuery接收它。我小组中的另一个人认为在页面加载后我们可以从URL中删除它,但我认为我们需要页面刷新,否则会丢失数据。
我正在尝试避免问题是X的XY问题而我问Y,那么从URL中删除变量的正确方法是什么?
答案 0 :(得分:8)
您可以使用历史记录API,但它确实需要现代浏览器
history.replaceState({}, null, "/index.html");
这会导致您的网址显示为/index.html而不重新加载页面
此处提供更多信息:
答案 1 :(得分:2)
您的问题似乎表示目标网页不是,不会由某些服务器端脚本提供支持。如果是这种情况,我建议将查询字符串更改为哈希,这样做的好处是直接可编辑而不会触发页面加载:
http://yourdomain.com/page.html#search=value
<script type='text/javascript'>
// grab the raw "querystring"
var query = document.location.hash.substring(1);
// immediately change the hash
document.location.hash = '';
// parse it in some reasonable manner ...
var params = {};
var parts = query.split(/&/);
for (var i in parts) {
var t = part[i].split(/=/);
params[decodeURIComponent(t[0])] = decodeURIComponent(t[1]);
}
// and do whatever you need to with the parsed params
doSearch(params.search);
</script>
但是,在这里涉及到一些服务器端脚本将会更好。
答案 2 :(得分:0)
可以使用JavaScript的历史API重写URL。 History.js是一个非常好的图书馆。
话虽如此,我认为除非您动态更改页面内容以使当前查询字符串无关紧要,否则无需从URL中删除查询字符串。
答案 3 :(得分:0)
您可以发布数据,然后让服务器在页面中包含发布的数据,例如:
echo "<script> post_data = ".json_encode($_POST)." </script>";
这适用于跨浏览器。