GET形式的输入字段:不在URL中提供参数?

时间:2011-11-01 10:45:31

标签: html

我想使用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之外是否还有其他方法。

5 个答案:

答案 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的查询部分来传递参数。