【问题标题】:hide variables passed in URL隐藏在 URL 中传递的变量
【发布时间】:2012-11-30 17:46:26
【问题描述】:

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

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

理想情况下,我们不希望显示?searchid=string,但我不确定我们会如何做到这一点。

我的小组不拥有 index.html 页面(但我们正在与拥有该页面的小组合作),所以我不知道我们能用.htaccess 或类似的东西做多少。

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

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

【问题讨论】:

  • 我不明白的是您要从 URL 中删除查询字符串的原因。页面内容是否以查询字符串不再相关的方式发生变化?
  • .htaccess 可以让你美化 url,它可以变成类似http://domain.com/searchfor/string 的东西。这样就够了吗?如果您想完全摆脱string,我认为没有发布是不可能的。并且不能从 html/js 读取 POST 数据,只能从服务器端读取。
  • 为什么你在做一个安静的应用程序会打扰你?
  • 可能的解决方案:stackoverflow.com/questions/824349/…

标签: javascript jquery html post get


【解决方案1】:

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

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

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

更多信息在这里:

Manipulated the browser history

【讨论】:

  • 这是一个很好的解决方案,但要针对此更改实施更多工作。点赞!
  • 这是迄今为止最好的答案,但您可能应该包括如何隐藏特定参数(例如,http://example.com/index.html?search=cats&utm_source=app),在这些参数中您想要隐藏分析源但您想要包含搜索以便用户可以共享链接或将其添加为书签。
  • 我需要的唯一答案。非常感谢@lostsource。
【解决方案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>

不过,在此处加入一些服务器端脚本会更好

【讨论】:

  • 这看起来将是最容易实现的,现在将代码交给其他组。
【解决方案3】:

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

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

【讨论】:

  • 我们是,而且总的来说它很丑。
【解决方案4】:

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

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

这适用于跨浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2012-04-19
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多