JavaScript,如何使用FormData模拟/打包一个表单数据?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文描述一个非常规的表单应用方式FormData
,常规的form
都是利用action
来提交数据的。那么,本文中使用FormData
来打包表单数据,进而可以使用ajax
等技术来提交数据。FormData
可以从普通的form
来生成,也可以无表单实物直接通过js
操作获得。
苏南大叔的程序如此灵动博客,记录苏南大叔和计算机代码的故事。测试环境:谷歌浏览器。
从已有表单初始化
这里就准备一个常见的表单,作为本文的标的物。
<form onsubmit="javascript:return check(this)">
用户名<input type="text" id="a1" name="username" value="用户名"><br />
密 码<input type="text" id="a2" name="password" value="密码"><br />
技 能<input type="checkbox" id="a3" name="skill[]" value="nodejs" checked="checked">nodejs<br />
<input type="checkbox" id="a4" name="skill[]" value="php" checked="checked">php<br />
简 介<textarea id="a5" name="brief">文字描述带换行</textarea>
<input type="submit" value="Submit!">
</form>
所有的输入元素都需要有name
属性,否则无法访问到值。这些输入项的name
就是FormData
的key
值。
function check(obj) {
//var data = new FormData(document.forms[0]);
var data = new FormData(obj);
data.forEach((value, name) => {
console.log(name,value);
});
return false;
}
js
直接模拟表单
new FormData(obj)
传入一个表单对象obj
,就可以直接获得这个表单内的所有的带name
的输入项。如果没有传入obj
的话,就是空的FormData
对象。
可以通过.set()
,.append()
来管理FormData
内的元素。当然,还有很多其他的方法对元素进行操作。但是,这并不是本文关心的内容。
var data = new FormData();
data.set("username", "用户名");
data.set("skill[]", "nodejs");
data.append("skill[]","php");
data.forEach((value, name) => {
console.log(name,value);
});
函数 | 说明 |
---|---|
.set(name,value) | 添加/修改一组数据 |
.append(name,value) | 叠加一组数据,并不修改已有的同名数据 |
其实,在FormData
内,并不关心input
的type
,只关心name
和value
。而对于复选框checkbox
,是允许存在同名数据的。所以,可以使用.append()
来模拟这种情况。
ajax
提交表单【待测】
实际测试结果显示:这里的代码发送给php
后端的时候,是可以正常使用的。但是,发给python
或者nodejs
的后端,或多或少都有一些问题,主要的症结在于发送数据时的contentType
。如果有需要,可以在着重在这个角度进行调试。
这里使用传统的XMLHttpRequest
来模拟这个表单提交。
var xhr = new XMLHttpRequest();
xhr.open("post", "formdata.php");
xhr.send(data);
xhr.onload = function () {
if (xhr.status == 200) {
console.log(xhr.responseText)
}
}
当然,也可以使用jquery
来提交数据。
$.ajax({
async: true,
url: "formdata.php",
type: "POST",
processData: false,
contentType: false,
data: data,
timeout: 60000, //毫秒
success: function(json) {
console.log(json);
},
error: function(json) {
console.log(json);
}
});
php
接收表单
为了查看提交的数据效果,这里使用php
作为后端处理逻辑代码做测试。
echo json_encode($_POST,JSON_UNESCAPED_UNICODE);
参考文字:
https://newsn.net/say/php-json.html
结束语
更多JavaScript
文章,请点击苏南大叔的博客:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。