我有一个<form>
,通常用submit
按钮发送:
<form action='/doit' method='post'>
<input type='text' name='ex1_q1' value='AAA'>
<input type='text' name='ex2_q1' value='BVB'>
<input type='submit' value='Go'>
</form>
这是有效的。
每隔10秒,我还想(在后台(用AJAX发送这个<form>
内容。然而,我注意到,当这样做时:
setInterval(function() {
var fd = new FormData(document.querySelector('form'));
fd.append("dt", +new Date);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/doit");
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(fd);
}, 10 * 1000);
确实发送了数据,但服务器接收数据的格式与使用"提交按钮"发送时的格式不同。
更准确地说:
当使用Ajax/XHR发送时,正文类似于:
b'------WebKitFormBoundaryQb7yIKHLZODhAjqIrnContent-Disposition: form-data; name="ex1_q1"rnrnAAArn------WebK
当用提交按钮发送时,我得到:
b'ex1_q1=AAA&ex2_q1=BVB&accept=on&numero=1'
在所有情况下都是我想要的
问题:对于XHR请求,如何使用与"提交"按钮相同的格式发送数据(情况2(
根据enctype
属性,表单数据以"application/x-www-form-urlencoded"或"multipart/form-data"的形式提交。
FormData对象将始终将数据编码为"多部分/表单数据"。
如果您想要"application/x-www-form-urlencoded",那么您应该使用URLSearchParams
对象。