2012-11-30 139 views
5

我们一直在研究一个web应用程序,我们只是想完成它,但有一件事情让我们感到困扰(尽管决不会停止生产。)隐藏变量在URL中传递

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

我们理想上不想显示?searchid=string,但我不知道我们该怎么做。

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

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

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

+0

我不明白的是你想从URL中删除查询字符串的原因。页面内容是否以查询字符串不再相关的方式更改? – zzzzBov

+1

'。htaccess'可以让你对网址进行优化,可以变成类似于'http:// domain.com/searchfor/string'的东西。这足够吗?如果你想完全摆脱'string',我不认为没有发布是可能的。你不能从html/js读取POST数据,只能从服务器端读取。 – bfavaretto

+0

为什么它打扰你,你正在做一个宁静的应用程序? – epascarello

回答

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> 

虽然,这将是更好得到一些涉及这里的服务器端脚本。

+0

看起来这将是最容易实现的,现在将代码交给另一个组。 – Rob

0

可以使用JavaScript的历史API重写URL。 History.js是一个非常好的图书馆。

这就是说,我不认为有必要从URL中删除查询字符串,除非您动态更改页面的内容以使当前查询字符串不相关。

+0

我们是,而且一般来说这是一个很大的丑陋。 – Rob

6

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

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

这将导致您的网址显示为/index.html没有

更多的信息在这里重新加载页面:

Manipulated the browser history

+0

这是一个很好的解决方案,但是为了实现这个改变还需要更多的工作。给予好评! – Rob

+0

这是迄今为止最好的答案,但是您应该包括如何隐藏您想要隐藏的特定参数(例如,http://example.com/index.html?search = cats&utm_source = app')分析源,但您希望包含搜索,以便用户可以共享链接或将其添加书签。 –

0

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

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

这是跨浏览器的作品。