/**
描述:使用ASP Request物件時需要注意的小問題作者:慈勤強
Email : [email protected]
**/
在ASP中Request對像是取得客戶端提交資料的一個很重要的對象,大家對他也是非常熟悉了。
雖然如此,還是常常有人問我下面的幾種寫法有什麼不同,到底該怎麼寫?
strMessage = Request("msg")
strMessage = Request.Form("msg")
而且,我也看過好多人寫的程式碼,一律都是Request("")的寫法,當然這樣的寫法並沒有錯。
只是大家應該注意
Request物件有幾個集合來取得客戶端提交的數據,一般常用的是QueryString,Form和ServerVariables。
而不管哪一種集合其實都是可以透過Request("")這樣直接取得的,這裡就有一個問題,如果
Get方式和Post方式提交了同樣的一個變量,例如username=cqq,那麼你用Request("username")
取出來的到底是Get過來的資料還是Post過來的資料呢?
所以,問題到了這裡,大家就應該想到了, Request從這幾個集合取資料是有順序的,從前到後的順序依序是QueryString,Form,最後是ServerVariables。 Request物件依照這樣的順序依序搜尋這幾個集合中的變量,如果有符合的就中止,後面的就不管了。 所以上面的範例Request("username")
取到的實際是Get方法提交的資料。
所以為了提高效率,減少無謂的搜尋時間,同時也是為了程式的規範,建議大家還是用Request.集合的方式更好一點,例如Request.Form("username")。
下面是測試例子,提交以後,大家可以直接在地址後面加上?username=aaa 測試:
<%
If request("submit")<>"" then
Response.Write "直接取:"& Request("username") & "<br>"
Response.Write "取Get:" & Request.QueryString("username") & "<br>"
Response.Write "取Post:" & Request.Form("username") & "<br>"
End if
%>
<form name=form1 action="" method=post>
<input type=test name="username" value="postuser">
<input type=submit name="submit" value="test">
</form>