我有一个附加了长查询字符串的URL。 页面加载后,我不需要查询字符串。所以我想从地址栏中删除查询字符串而不重新加载页面。
我尝试了parent.location.hash = '';
和window.location.href = '/#'
他们没有什么区别。
答案 0 :(得分:36)
正如其他人所说,您可以使用现代浏览器中的History API(IE10 +,FF4 +,Chrome5 +)来完成此操作。答案中没有完整的例子,所以我认为我可以分享我的解决方案,因为我只需要做同样的事情:
history.pushState(null, "", location.href.split("?")[0]);
如果您使用Modernizr,还可以检查历史记录API是否可用:
if (Modernizr.history) {
history.pushState(null, "", location.href.split("?")[0]);
}
答案 1 :(得分:16)
使用modern browsers the history api可以实现这一点,但可能不是解决问题的最佳方法。
history.replaceState({}, 'some title', '/');
听起来你最好处理数据,然后重定向到主页,而不是直接返回HTML文档。
由于您不想保留URL,因此对书签没有用处,因此您很可能最好不要发出POST请求。
这表明您应该使用POST-Redirect-GET pattern。
答案 2 :(得分:7)
如果不重新加载页面,你不能这样做,想象一下你是否可以在浏览器地址栏中放置你想要的东西?安全乐趣:)
虽然现在可以使用新的history API在HTML5中进行(仅适用于支持它的浏览器),但实际上,您的方案最好保证重写而不是包含(似乎大锤要破解坚果)。
如你所说,在页面加载后你不需要查询字符串,你应该真的回发,然后在你完成处理后重定向到另一个URL。
答案 3 :(得分:2)
使用history.replaceState({}, "Title", "page.html");
pushState
的语法相同。但是,您必须找到一种让IE了解的方法。
更好的方法是使用Apache mod_rewrite
模块。这很容易使用。
答案 4 :(得分:0)
现在更新了代码
只需在您要更改其链接的页面中添加以下代码。
// javascript function
function buildLin(first) {
var firs = first.toString()
//alert(firs);
//document.getElementById("team").value = "1";
document.location.hash = "#" + firs.replace(/ /g, "_");
//alert(document.location.hash);
}
//jQuery to call above function after page loads
$(document).ready(function () {
buildLin(2);
});
不要忘记添加http://code.jquery.com/jquery-latest.js 在你的页面上
答案 5 :(得分:0)
我遇到了同样的问题。我的解决方案是: 得到这样的请求:
operation.aspx?opr=lock
完成操作重定向后,如下所示:
Response.Redirect("operation.aspx");
在回复中,如果有任何消息,我打印出来就像这样:
if (Session["InfoMessages"] != null)
{
lblMessage.Text = (string)Session["InfoMessages"];
Session["InfoMessages"] = null;
}
我希望它能帮助别人:)
答案 6 :(得分:0)
我在个人项目中使用此代码snippit,我需要删除URL params而不重新加载:
var newURL = location.href.split("?")[0];
window.history.pushState('object', document.title, newURL);
答案 7 :(得分:0)
我想再添加一种方法,尤其是对于使用$routeProvider
的人。
正如在其他一些答案中提到的那样,你可以使用:
var yourCurrentUrl = window.location.href.split('?')[0];
window.history.replaceState({}, '', yourCurrentUrl );
或在历史堆栈中创建新记录:
window.history.pushState({}, '', yourCurrentUrl );
有关使用history.pushState
和history.replaceState
的详细而详细的解释,您可以阅读this post on SO。
但是,如果您在应用中使用Angular $routeProvider
,那么如果它与任何现有模式匹配,它仍将捕获此更改。为避免这种情况,请确保将$routeProvider
reloadOnSearch标记设置为false
,因为默认情况下为true
。
例如:
$routeProvider.when("/path/to/my/route",{
controller: 'MyController',
templateUrl: '/path/to/template.html',
//Secret Sauce
reloadOnSearch: false//Make sure this is explicitly set to false
});
答案 8 :(得分:0)
从地址栏中删除查询字符串值
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, clean_uri);
}
答案 9 :(得分:0)
window.history.replaceState(null,null,window.location.pathname);
答案 10 :(得分:-1)
您可以使用POST
代替GET
完全避免使用查询字符串。