我想使用GET提交表单,但没有传递URL中输入字段的值。
(某些背景可能会有所帮助:我想使用表单,以便用户可以输入他们的名字并按Enter键继续,但我真正希望他们做的就是转到下一页,重要的是URL没有参数。)
目前显示的下一页/nextpage?username=fred
的网址:
<form name="entername" action="/nextpage" method="get">
<label for="name">Enter your name: </label>
<input id="username" name="username"><br/>
<input id="submitme" type="submit" value="Submit" class="button"></form>
有没有办法可以简单地转到/nextpage
?
我猜“使用POST”是一个答案,但如果可能的话,我宁愿避免这种情况(因为如果用户刷新下一页,他们会得到一个可怕的'重新提交信息?'警报)。
所以我只是想知道除了POST之外是否还有其他方法。
答案 0 :(得分:3)
正确的解决方案是发出POST请求,当您处理它时,将用户重定向到答案页面,从而导致用户的浏览器向其发出GET请求。 这可确保如果用户刷新其答案页面,则不会导致重新提醒警报。见more detailed description of this POST/REDIRECT/GET pattern
有点hacky的解决方案是使用onsubmit javascript处理程序,它将设置一些反映表单输入字段的cookie,然后删除字段,这样它们就不会出现在用户的urlbar中。然后,服务器应该从cookie中读取提交的值。
以下是使用jquery和php脚本作为后端处理器的cookie hack示例:
<?php
//unsets the cookie:
setcookie('username', "", time() - 3600);
?>
<!DOCTYPE html>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<form name="entername" action="" method="get">
<label for="name">Enter your name: </label>
<input id="username" name="username"><br/>
<input id="submitme" type="submit" value="Submit" class="button">
</form>
<script>
function js_setcookie(c_name,value){
document.cookie=c_name + "=" + escape(value);
}
$(function(){
$('form').submit(function(){
var username=$("#username").val();
js_setcookie("username", username);
window.location = ""; // "" means GET the same page ... change it to whatever backend URL you want instead, for example "http://..../nextpage" .
return false; // prevent the default event handler that will make a GET request with a query string in it.
});
});
</script>
<?php
echo "<pre>";
var_dump(isset($_COOKIE['username'])?"Cookie: ".$_COOKIE['username']:"Cookie is not set.");
echo "</pre>";
?>
</body>
</html>
答案 1 :(得分:0)
您可以实施iframe
,并在iframe
中执行脏事。那真的是老派,而不是现在的模式。
我会使用Ajax在页面之间保存Cookie或会话中的所有信息。而不是发布也不是,只需链接到下一步。
答案 2 :(得分:0)
您可以使用带有onsubmit处理程序的Javascript删除输入字段。
答案 3 :(得分:0)
如果您需要获取服务器上的值,您可以捕获脚本“/ nextpage”中的值,然后重定向到没有参数的页面。但我不喜欢这种解决方法。在JavaScript / Ajax的帮助下更好地使用POST或流程表。
答案 4 :(得分:0)
这根本不可能。这就是GET请求的工作原理。您可以使用URL的查询部分来传递参数。