如何获取每个元素作为键传递给帖子表单的对象
How to get an object with each element passed as a key to a post form?
我遇到一种情况,我需要使用 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 帖子下载文件,因此这是一个回退,允许我下载文件而无需提交原始表单,这会导致不希望的整页刷新。
那么,有没有办法以这种方式附加我的数据,而无需循环访问数据的属性以将每个属性添加为隐藏字段?
不幸的是没有:HTMLFormElement API。
第二次尝试怎么样假设 jQuery 你可以修改纯 JavaScript,我只是太懒了,我想帮助你不要让你的工作: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.
这是你想要的吗???
的输入中的json.stringify
呢? 然后,您可以在服务器端解码 JSON 并拥有您想要的一切。
这是一个类似的例子,它没有具体回答你的问题,而是使用你的技术。在浏览器中通过 iframe 将 PDF URL 发送到打印机
请参阅 JavaScript 部分。
- 如何从表单变量对象中获取特定的from属性
- 将表单对象保存到具有主干.js的模型
- 从表单到 Ajax 的动态对象访问
- 从包含表单的对象中提取值
- AngularJS不会从对象中删除表单
- 即使对于非空窗体,FormData对象也返回空.对于具有2个输入字段的表单,
- 在模板中为Django表单分离媒体类对象的JS和CSS列表输出
- 从JQuery到Javascript函数获取表单对象
- 如何使用rails 3.1.4中的FormBuilder.new构建表单生成器对象
- 使用Jquery在单击“”时显示表单;添加对象”;按钮
- 如何获取给定表单详细信息的嵌套json对象
- jquery将表单中的数据收集到多个对象中
- 当点击输入表单时,为Raphael制作的对象添加光晕
- 从表单中派生要使用javascript对象加载的图像路径
- 使用ng repeat将表单元素绑定到角度中的新对象
- 可以'无法从现有表单中生成FormData对象
- 如何创建 XMLHttpRequest FormData 表单对象
- 如何将 Base64 字符串转换为 javascript 文件对象,就像从文件输入表单一样
- 如何创建动态html表单的创建JSON对象(表单元素)
- 基本的Javascript对象/表单访问