javascript - 是否可以使用 javascript 通过 POST 多次发送一个变量?

标签 javascript ajax http-post

让我解释一下为什么我需要这样做!

我需要向另一台服务器发送请求,其格式如下:

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/

相关文章:

javascript - 如何从异步调用返回响应?

javascript - 为什么我的 ajax 请求向服务器发送空对象

javascript - 井字游戏不起作用

javascript - 使用 ExpressJS POST 请求为空

jquery - 使用 jquery 创建模式

rest - HTTP RESTful Web 服务注销 : Which is correct or better practice - POST or DELETE?

android - 使用 HTTP post 将文件上传到服务器时出现 "Missing file"错误

javascript - 如何使用 JavaScript 向后端发送很长的文本?

javascript - CSS,如果是移动设备则更改样式表

javascript - 如何使用 Javascript 从 JSON 数组响应中删除一些字段?