隐藏在URL中传递的变量

时间:2012-11-30 17:46:26

标签: javascript jquery html post get

我们一直致力于一个网络应用程序,我们刚刚完成它,但是有一件事困扰着我们(尽管它决不会停止生产。)

当我们调用其中一个页面(index.html)时,我们有时必须在URL(searchid)中传递一个变量。我们得到了一个类似http://domain.com/index.html?searchid=string的页面。

我们最好不要展示?searchid=string,但我不确定我们是怎么做的。

我的群组不拥有index.html页面(但我们正在与正在进行的群组合作),因此我不知道我们能够对.htaccess或类似。

我在考虑POST变量,但我不知道如何使用HTML和jQuery接收它。我小组中的另一个人认为在页面加载后我们可以从URL中删除它,但我认为我们需要页面刷新,否则会丢失数据。

我正在尝试避免问题是X的XY问题而我问Y,那么从URL中删除变量的正确方法是什么?

4 个答案:

答案 0 :(得分:8)

您可以使用历史记录API,但它确实需要现代浏览器

history.replaceState({}, null, "/index.html");

这会导致您的网址显示为/index.html而不重新加载页面

此处提供更多信息:

Manipulated the browser history

答案 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>";

这适用于跨浏览器。