使用服务器端Javascript访问Classic Asp上的表单数据

Accessing Form Data on Classic Asp using server side Javascript

本文关键字:表单 数据 Asp Classic 服务器端 Javascript 访问      更新时间:2023-09-26

我正准备使用aspjavascript实现html表单的服务器端验证,但我遇到了一些意外行为。。我的asp和html代码如下:

<%
var bread = String(Request.Form("bread"));
if (!bread)
    Response.Write("Choose a bread!");
%>
<br/>
    <select id="breadDropDown" name="bread">
        <option value=""></option>
        <option value="white">white</option>
        <option value="wheat">wheat</option>
        <option value="flatbread">flatbread</option>
    </select>
</div>

在这里,我得到了我想要的行为,即在GET上什么都不写,在无效POST上写错误。

<%
var meat = String(Request.Form("meat"));
if (!meat)
    Response.Write("Choose a meat!");
%>
<br/>
    <input type="checkbox" name="meat" value="turkey">turkey</input><br />
    <input type="checkbox" name="meat" value="ham">ham</input><br />
    <input type="checkbox" name="meat" value="roast beef">roast beef</input><br />
    <input type="checkbox" name="meat" value="double meat">double meat</input><br />
</div>

但是,当我使用一组复选框而不是选择框时,我会得到不正确的行为。。即没有写入错误。

任何见解都会有所帮助,因为我所能找到的classis.asp和javascript的资源并不丰富。

谢谢!

Request.Form("meat")将为您提供未定义的

请求("肉")将为您提供以逗号分隔的字符串(例如火鸡、火腿)中检查的值

我一直认为您需要在输入标记周围放置一个表单标记。

<form name='frmFood' id='frmFood' method='post'>
<input or select>
</form>

Graham和ScotterMonkey的两个现有答案在某种程度上触及了根本问题,但我将尝试用一些有用的上下文更完整地综合它们。

ASP Classic提供了一个Request对象,该对象具有多种集合的属性,例如:

Request.Form
Request.QueryString
Request.ServerVariables

在原始问题提供的代码中,您正试图访问Request.Form("meat")。然而,ASP的Request.Form集合仅通过提交HTML表单元素来填充,并且由于在代码的HTML部分中没有声明HTML表单元素,因此Request.Form无法访问。

然而,正如用户Graham所指出的,Request对象似乎能够通过其关联的name属性访问请求页面的HTML元素。因此,访问Request("meat")返回页面上每个元素的列表,该列表具有对应于"0"的名称属性;肉";。

关于ASP的内置请求对象的Microsoft文档有助于了解这种类型的旧代码。https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524948(v=vs.90)