13

我正在将 GET 更改为 POST。目前我有 .jsp?id=a,b,c,d。将其更改为帖子时,我仍然使用 id 参数 a,b,c,d 。这对我不起作用。我可以将逗号分隔的列表提交给 post 参数吗?

4

7 回答 7

14

您可以像选择表单输入一样进行操作:

url?param=value1¶m=value2¶m=value3

根据您的语言和库,您应该能够获得参数值的数组。


例如,使用 asp.net mvc 我这样做是为了获取一个字符串数组:

string[] values = Request.Form.GetValues("param");
于 2008-10-07T10:00:49.907 回答
14

芬恩是对的。采用

url?param=value1&param=value2&param=value3

为单个参数设置多个值。要读取 Servlet/JSP 中的值,您可以使用

String[] values = request.getParameterValues("param");
于 2008-10-07T10:19:00.540 回答
14

我错了还是大多数答案都是题外话?

要准确回答您的问题,是的,您可以将逗号分隔的列表提交给 POST 参数。老实说,我只是快速尝试了一个 PHP 脚本,但我不明白为什么 Java 会有不同的行为。POST 请求的一点恰恰是您对语法的限制要少得多(无需转义 = & 等)。

因此,如果您更详细地解释什么“不起作用”,也许我们可以为您提供更多帮助。

于 2008-10-07T12:46:55.407 回答
3

设置为通过将参数命名为数组来传递多个值。不要将输入称为“id”,而是将其称为“id[]”

<form method="post">
<select multiple name="id[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="submit" value="send">
</form>

处理时,记得提取命名参数发送的值数组。

于 2008-10-07T10:22:41.097 回答
1

您可以使用传递多个参数

        xmlhttp
                .send("files=" + files.value + "&tagcount="
                        + tagcount.value);

这里的filestagcount是要传递的参数的 id。这适用于我的 Ajax 脚本。在正常情况下,您可以通过 &添加参数。所以参数看起来像

"parameter1=" + parameter1.value + "&parameter2=" + parameter2.value
于 2012-01-20T08:27:25.267 回答
0

在发布请求中,参数列表中应该有至少 1 个参数。如果您将参数附加到请求,那么它将不起作用。为此,您需要将参数作为表单的隐藏字段发送。或尝试使用以下代码

函数 makePOSTRequest(url, 参数) {

  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
     http_request = new XMLHttpRequest();
     if (http_request.overrideMimeType) {
        // set type accordingly to anticipated content type
        //http_request.overrideMimeType('text/xml');
        http_request.overrideMimeType('text/html');
     }
  } else if (window.ActiveXObject) { // IE
     try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
        try {
           http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
     }
  }
  if (!http_request) {
     alert('Cannot create XMLHTTP instance');
     return false;
  }

  http_request.onreadystatechange = alertContents;
  http_request.open('POST', url, true);
  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http_request.setRequestHeader("Content-length", parameters.length);
  http_request.setRequestHeader("Connection", "close");
  http_request.send(parameters);

}

于 2008-10-07T11:23:23.720 回答
0

GET 和 POST 有两个不同的目的。来自维基百科 HTTP 条目:

得到

请求指定资源的表示。请注意,GET 不应用于会导致副作用的操作,例如在 Web 应用程序中使用它来执行操作。这样做的一个原因是 GET 可能被机器人或爬虫任意使用,它们不需要考虑请求应该引起的副作用。请参阅下面的安全方法。

邮政

将要处理的数据(例如,从 HTML 表单)提交给已识别的资源。数据包含在请求的正文中。这可能导致创建新资源或更新现有资源或两者兼而有之。

基本上,您应该使用 GET 来获取信息,并使用 POST 来执行任何更改服务器状态的操作,例如添加新记录。

于 2008-11-29T02:19:30.007 回答