让我解释一下为什么我需要这样做!
我需要向另一台服务器发送请求,其格式如下:
http://www.test.ccom/process?item=1AAA&item=2BBB&item=3CCC
此 URL 将向结果页面添加 3 个不同的项目(每个项目一个),如下所示:
Item = 1AAA Count=1
Item = 2BBB Count=1
Item = 3CCC Count=1
如果我只想添加一项中的 3 个,我应该使用这个:
http://www.test.ccom/process?item=1AAA&item=1AAA&item=1AAA
结果页面将是这样的:
Item = 1AAA Count=3
我的问题是我无法使用 GET 方法发送请求(因为我们要为每个项目添加超过 100 个,这会导致“Request-URI Too Large”错误)
我使用了两种不同的方法通过 POST 发送此请求,但没有成功。
首先我使用了这个函数:
function post_by_form(path, params) {
// The rest of this code assumes you are not using a library.
// It can be made less wordy if you use one.
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", path);
form.setAttribute("style", "display: none")
for(var key in params) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "item");
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
}
当我使用不同的变量名称(name="item"+key)测试它时它可以工作,但当我对所有输入使用一个变量名称时它不起作用。
然后我使用这个函数通过ajax发送POST请求:
function post_by_ajax(path, params_arr){
var http = new XMLHttpRequest();
var url = path;
var params = "";
for(var key in params_arr) {
if (params != "")
params += "&item="+params_arr[key];
else
params += "item="+params_arr[key];
}
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(params);
}
结果相同,这两种方法都只会返回一项(最后一项)的一个数量...虽然我们可以提交一个包含许多同名输入字段的表单,但为什么我不能使用这些方法?!我逻辑有问题吗?!有人可以帮我吗?!
最佳答案
使用 Firefox 和 TamperData 插件,以及一个只有四个字段的表单,全部指定为 <input type="text" name="item">
我可以看到 POST 数据确实发送了四个 变量,所有变量均名为“item”,但每个变量的值不同。
然后由接收服务器来做一些明智的事情。大多数系统只会使用发送的四个值中的一个(可能是第一个,或最后一个),但如果已经有一个服务器可以正确处理 http://www.test.ccom/process?item=1AAA&item=1AAA&item=1AAA
那么您添加多个名为“item”的字段应该可以工作。
如果情况并非如此,那么您需要编写一些内容来在服务器端处理该问题 - 再多的 JavaScript 编码也无法做到这一点。这将涉及获取整个 POST 主体并自行处理它,因为大多数服务器端框架(就像我所说的)通常只会使用其中一个值。
您可以使用 TamperData 或类似的工具来捕获 HTTP 数据流,并查看您现在拥有的 javascript 实际传输的内容。
<小时/>最终,您的问题“是否可以使用 javascript 通过 POST 多次发送一个变量?”的答案是是,这是可能的。
关于javascript - 是否可以使用 javascript 通过 POST 多次发送一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749763/