我正在寻找一种方法来在用户刷新页面时更改页面URL(更改其中一个url键的值)。我这样做是为了反映页面内容的变化。我尝试了几种方法,但它们都有循环问题。以下是其中一种方法:
在我的html页面中:
<body onLoad="CheckPageLoad();">
<input type="hidden" name="trial" id="trial" value="hello" />
</body>
在page.asp页面中:(在脚本标记内)
function CheckPageLoad() {
if ($("#trial").val() == "hello") {
// This is a fresh page load
alert('Load');
$("#trial").val("hi");
} else {
// This is a page refresh
window.location = url;
alert('Refresh');
}
}
问题:
任何有关更新上述方法或使用其他方法进行刷新的建议都表示赞赏。以下是我也尝试过的其他方法:
window.onbeforeunload = unloadPage();
function unloadPage() {
//do something
//works but loops
}
由于
答案 0 :(得分:1)
我将以下代码放入基本页面,它演示了为什么要获得所描述的行为:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
function CheckPageLoad() {
if ($("#trial").val() == "hello") {
// This is a fresh page load
alert('Load');
$("#trial").val("hi");
} else {
// This is a page refresh
alert('Refresh');
window.location = window.location + '?id=1';
}
}
</script>
</head>
<body onLoad="CheckPageLoad();">
<input type="hidden" name="trial" id="trial" value="hello" />
</body>
</html>
当你设置window.location时,它会更改url(well duh!),这意味着你正在加载一个新页面。刷新页面后,您会在“加载”之前收到“刷新”警报。这表明页面首先发布,但onload事件导致页面导航到另一个位置,因此再次加载。我的理解是,更新URL中的任何内容最终都是新请求/新加载的页面。
您可能会发现以下对于asp中的viewstate有用(看到您建议使用的是asp页面):http://msdn.microsoft.com/en-us/library/ms972976.aspx
我的建议是完全删除代码的window.location = url;
部分,转而查看已发回的数据。这意味着您不会在回发时不必要地加载页面两次,并允许您从任何更新的输入访问数据。