2011-11-01 104 views
1

我想使用GET提交表單,但是沒有傳遞URL中輸入字段的值。以GET形式輸入字段:不提供URL中的參數?

(某些背景可能會有所幫助:我想使用表單,以便用戶可以輸入其名稱並按Enter鍵以繼續,但我真正希望它們執行的操作是轉到下一頁,和它的重要的URL沒有參數)

目前下一頁/nextpage?username=fred所顯示的URL:

<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

您想在服務器上提供該名稱嗎? – thejh

+1

'/ nextpage?username = fred'有什麼問題?當用戶將此頁面標記爲書籤時,他可以回到'/ nextpage?username = fred'。 –

+0

我希望用戶能夠與其他人分享網址。該參數與他們無關(實際上對這個用戶而言)。 – Richard

回答

3

正確的解決方案是發出POST請求,並在處理它時將用戶重定向到答案頁面,從而導致用戶的瀏覽器向其發出GET請求。 這確保瞭如果用戶刷新他的回答頁面,它不會導致重新提交警報。請參閱more detailed description of this POST/REDIRECT/GET pattern

有點冒險的解決方案將使用onsubmit JavaScript處理程序,它將設置一些反映表單輸入字段的cookie,然後刪除字段,以便它們不會出現在用戶的urlbar中。然後服務器應該從cookie中讀取提供的值。

這裏是餅乾黑客的例子,使用jQuery和PHP腳本作爲後端處理器:

<?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> 
+0

謝謝 - 我將使用「正確的」解決方案:) – Richard

0

你可以實現一個iframe,並在那iframe你做髒東西。那真是一所古老的學校,並不是真正的現代模式。

我會將所有信息保存在Cookie或Session中,使用Ajax從頁面到頁面。而不是發佈或獲取,只需鏈接到下一步。

0

您可以使用Javascript通過onsubmit處理程序刪除輸入字段。

0

如果您需要獲得服務器上的價值,你可以在腳本趕上值「/nextpage「,然後重定向到一個沒有參數的頁面。但我不喜歡這個解決方法。藉助JavaScript/Ajax更好地使用POST或流程表單。

0

這根本不可能。這就是GET請求的工作原理。您使用URL的查詢部分來傳遞參數。

相關問題