如何以与使用"提交"按钮时相同的格式发送带有FormData的POST XHR请求



我有一个<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);

确实发送了数据,但服务器接收数据的格式与使用"提交按钮"发送时的格式不同。

更准确地说:

  1. 当使用Ajax/XHR发送时,正文类似于:

    b'------WebKitFormBoundaryQb7yIKHLZODhAjqIrnContent-Disposition: form-data; name="ex1_q1"rnrnAAArn------WebK
    
  2. 当用提交按钮发送时,我得到:

    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对象。

最新更新