Javascript 如何获取每个元素都作为键传递给post表单的对象?

Javascript 如何获取每个元素都作为键传递给post表单的对象?,javascript,forms,Javascript,Forms,我需要使用javascript动态创建一个表单,以支持一些遗留浏览器。我需要通过表单发送的数据当前位于对象中,例如: var data = { name: 'John Doe', age: 35 }; var myForm = document.createElement("form"); myForm.setAttribute("action", myPostActionPath); myForm.setAttribute("method", "post"); // Append data

我需要使用javascript动态创建一个表单,以支持一些遗留浏览器。我需要通过表单发送的数据当前位于对象中,例如:

var data = { name: 'John Doe', age: 35 };
var myForm = document.createElement("form");
myForm.setAttribute("action", myPostActionPath);
myForm.setAttribute("method", "post");

// Append data to the form somehow.

myForm.submit();
我觉得这应该是一件简单的事情,但我肯定错过了一些显而易见的事情。我想要的是有一些东西将表单数据作为每个数据属性的键传递,比如上面的例子中的“name=John%20Doe&age=35”。我想这样做,而不必做以下事情:

var data = { name: 'John Doe', age: 35 };
var myForm = document.createElement("form");
myForm.setAttribute("action", myPostActionPath);
myForm.setAttribute("method", "post");

// NOT what I would like:
var formField1 = document.createElement("input");
formField1.setAttribute("type", "hidden");
formField1.setAttribute("name", "name");
formField1.setAttribute("value", data.name);
myForm.appendChild(formField1);

var formField2 = document.createElement("input");
formField2.setAttribute("type", "hidden");
formField2.setAttribute("name", "age");
formField2.setAttribute("value", data.age);
myForm.appendChild(formField2);

myForm.submit();
那么,是否有任何方法可以通过这种方式附加我的数据,而不必循环数据的属性,将每个属性添加为隐藏字段

另外,请注意,我的数据属性可能是对象或数组本身

更新

这是我当前的解决方案,但我一直在寻找一种更直接的方法来传递数据,而不必遍历数据对象,但从这里的所有答案来看,似乎没有其他方法:

var data = { name: 'John Doe', age: 35 };
var myForm = document.createElement("form");
myForm.setAttribute("action", myPostActionPath);
myForm.setAttribute("method", "post");

$.each(data, function(name, value) {
    var formInput = document.createElement("input");
    formInput.setAttribute("type", "hidden");
    formInput.setAttribute("name", name);
    formInput.setAttribute("value", value);
    myForm.appendChild(formInput);
});

myForm.submit();

为了更好地解释一下,在将一些数据发送回控制器后,我使用此操作下载文件,IE8和IE9不允许通过AJAX post下载文件,因此这是一种回退,允许我下载文件,而无需提交原始表单,这将导致不希望的整页刷新。

json.stringify
在输入中隐藏?然后,您可以在服务器端解码json并获得所需的一切

这里有一个类似的例子,它不是专门回答你的问题,而是使用你的技巧


请参阅javascript部分。

在隐藏的输入中如何处理
json.stringify
?然后,您可以在服务器端解码json并获得所需的一切

这里有一个类似的例子,它不是专门回答你的问题,而是使用你的技巧


请参阅javascript部分。

在隐藏的输入中如何处理
json.stringify
?然后,您可以在服务器端解码json并获得所需的一切

这里有一个类似的例子,它不是专门回答你的问题,而是使用你的技巧


请参阅javascript部分。

在隐藏的输入中如何处理
json.stringify
?然后,您可以在服务器端解码json并获得所需的一切

这里有一个类似的例子,它不是专门回答你的问题,而是使用你的技巧

请参阅javascript部分

那么,是否有任何方法可以通过这种方式附加我的数据,而不必循环数据的属性,将每个属性添加为隐藏字段

不幸的是,没有:

那么,是否有任何方法可以通过这种方式附加我的数据,而不必循环数据的属性,将每个属性添加为隐藏字段

不幸的是,没有:

那么,是否有任何方法可以通过这种方式附加我的数据,而不必循环数据的属性,将每个属性添加为隐藏字段

不幸的是,没有:

那么,是否有任何方法可以通过这种方式附加我的数据,而不必循环数据的属性,将每个属性添加为隐藏字段

不幸的是,没有:。

第二次尝试怎么样 //假设您可以为纯javascript修改jquery,我只是太懒了,我不想帮您完成任务:P

var data = { name: 'John Doe', age: 35 }

var arrTemplate = [];
arrTemplate.push("<form id='whateverID' action='' method=''");
for (var k in data){
    if (data.hasOwnProperty(k)) {
         arrTemplate.push("<input type='hidden' name='"+ k +"' value='"+ data[k] +"'>");
    }
}
arrTemplate.push("</form>");

$(document).append(arrTemplate.join(""));
$("#whateverID").submit();
//then you could remove the form if you want to.
var data={name:'johndoe',年龄:35}
var-arrmetplate=[];
arrTemplate.push(“第二次尝试怎么样
//假设您可以为纯javascript修改jquery,我只是太懒了,我不想帮您完成任务:P

var data = { name: 'John Doe', age: 35 }

var arrTemplate = [];
arrTemplate.push("<form id='whateverID' action='' method=''");
for (var k in data){
    if (data.hasOwnProperty(k)) {
         arrTemplate.push("<input type='hidden' name='"+ k +"' value='"+ data[k] +"'>");
    }
}
arrTemplate.push("</form>");

$(document).append(arrTemplate.join(""));
$("#whateverID").submit();
//then you could remove the form if you want to.
var data={name:'johndoe',年龄:35}
var-arrmetplate=[];
arrTemplate.push(“第二次尝试怎么样
//假设您可以为纯javascript修改jquery,我只是太懒了,我不想帮您完成任务:P

var data = { name: 'John Doe', age: 35 }

var arrTemplate = [];
arrTemplate.push("<form id='whateverID' action='' method=''");
for (var k in data){
    if (data.hasOwnProperty(k)) {
         arrTemplate.push("<input type='hidden' name='"+ k +"' value='"+ data[k] +"'>");
    }
}
arrTemplate.push("</form>");

$(document).append(arrTemplate.join(""));
$("#whateverID").submit();
//then you could remove the form if you want to.
var data={name:'johndoe',年龄:35}
var-arrmetplate=[];
arrTemplate.push(“第二次尝试怎么样
//假设您可以为纯javascript修改jquery,我只是太懒了,我不想帮您完成任务:P

var data = { name: 'John Doe', age: 35 }

var arrTemplate = [];
arrTemplate.push("<form id='whateverID' action='' method=''");
for (var k in data){
    if (data.hasOwnProperty(k)) {
         arrTemplate.push("<input type='hidden' name='"+ k +"' value='"+ data[k] +"'>");
    }
}
arrTemplate.push("</form>");

$(document).append(arrTemplate.join(""));
$("#whateverID").submit();
//then you could remove the form if you want to.
var data={name:'johndoe',年龄:35}
var-arrmetplate=[];


arrmetplate.push(“仅供参考,这是一个JavaScript对象,不是JSON。JSON是一种文本的、独立于语言的数据格式。是的,Felix。我的对象实际上是JSON,这只是为了简化示例。数据从哪里来并不重要。顺便说一句,为什么你不能发出Ajax请求?我不能使用Ajax,因为post会发回一个要下载的文件和IE8nd IE9不允许通过AJAX post下载文件。仅供参考,这是一个JavaScript对象,而不是JSON。JSON是一种文本、独立于语言的数据格式。是的,Felix。我的对象实际上是JSON,这只是为了简化示例。数据来自何处并不重要。顺便说一句,为什么你不能发出AJAX请求?我不能使用Ajax因为post发回一个要下载的文件,IE8和IE9不允许通过AJAX post.FYI下载文件,这是一个JavaScript对象,不是JSON。JSON是一种文本的、独立于语言的数据格式。是的,Felix。我的对象实际上是JSON,这只是为了简化示例。数据在哪里并不重要来自。顺便说一句,你为什么不能发出Ajax请求?我不能使用Ajax,因为post发回一个要下载的文件,IE8和IE9不允许通过Ajax post下载文件。仅供参考,这是一个JavaScript对象,而不是JSON。JSON是一种文本、独立于语言的数据格式。是的,Felix。我的对象实际上是JSON,也就是j只是为了简化这个例子。数据从哪里来并不重要。顺便说一句,为什么你不能发出一个Ajax请求?我不能使用Ajax,因为post发回一个要下载的文件,IE8和IE9不允许通过Ajax post下载文件。这个想法是根本不必更改服务器端,也不必让它知道是用例,它只适用于传统浏览器。为什么只需简单地迭代