9

我们一直在开发一个 Web 应用程序,我们刚刚完成它,但有一件事情困扰着我们(尽管它绝不会停止生产。)

当我们调用其中一个页面(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

4 回答 4

16

您可以使用 History API,但它确实需要现代浏览器

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

这将导致您的 URL 显示为 /index.html 而无需重新加载页面

更多信息在这里:

操纵浏览器历史记录

于 2012-11-30T17:51:54.457 回答
3

您的问题似乎表明目标页面不是也不会由某些服务器端脚本提供支持。如果是这种情况,我建议将查询字符串更改为哈希,其优点是可以直接编辑而不会触发页面加载:

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>

不过,最好在这里涉及一些服务器端脚本。

于 2012-11-30T18:06:50.697 回答
0

您可以发布数据,然后让服务器在页面中包含发布的数据,例如:

echo "<script> post_data = ".json_encode($_POST)." </script>";

这适用于跨浏览器。

于 2012-11-30T17:54:01.777 回答
0

可以使用 JavaScript 的历史 API 重写 URL。History.js是一个做得很好的库。

话虽如此,我认为没有必要从 URL 中删除查询字符串,除非您动态更改页面内容以使当前查询字符串无关紧要。

于 2012-11-30T17:51:13.793 回答