通过JavaScript我将一个查询参数附加到页面网址,我面临一个奇怪的行为。
<div>
<a href="Default3.aspx?id=2">Click me</a>
</div>
$(function () {
window.location.href = window.location.href + "&q=" + "aa";
});
现在我在default3.aspx中附加&q=aa
,并且在此页面中&q=aa
会不断添加,从而导致网址变为:
http://localhost:1112/WebSite2/Default3.aspx?id=2&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa&q=aa
有人会说像<a href="Default3.aspx?id=2&q=aa">Click me</a>
那样传递它,但我不能这样做。此查询参数的值实际上是default3.aspx中的HTML元素的值。我必须在运行时添加它。
实现这一目标的方法有哪些?
答案 0 :(得分:5)
发生这种情况的原因是,如果您更改window.location
值,浏览器将执行重定向到新位置,而您在document.ready
中执行此操作会无限期地发生这种情况。
在执行此重定向之前,您可能需要检查当前网址是否已包含这些参数。
$(function () {
var suffix = '&q=aa';
var currentUrl = window.location.href;
if (currentUrl.match(suffix + '$') != suffix) {
window.location.href = window.location.href + suffix;
}
});
备注:在我看来,使用javascript似乎是一个坏主意。我会在服务器端执行此重定向,这将更可靠。在default.aspx页面中:
protected void Page_Load(object sender, EventArgs e)
{
var q = Request["q"];
if (string.IsNullOrEmpty(q))
{
// q parameter has not been set => redirect
Response.Redirect("/default.aspx?q=aa");
}
}