Easier way to transform FormData into query string(将 FormData 转换为查询字符串的更简单方法)
问题描述
我正在通过 XMLHttpRequest
发送一个 POST 请求,其中将数据输入到 HTML 表单中.不受 JavaScript 干扰的表单将提交其编码为 application/x-www-form-urlencoded
的数据.
I’m sending a POST request via XMLHttpRequest
with data entered into an HTML form. The form without interference of JavaScript would submit its data encoded as application/x-www-form-urlencoded
.
使用 XMLHttpRequest,我想通过 FormData
API 发送数据,该 API 不起作用,因为它将数据视为编码为 multipart/form-data代码>.因此,我需要将数据作为查询字符串,正确转义,写入
XMLHttpRequest
的发送方法.
With the XMLHttpRequest, I wanted to send the data with via the FormData
API which does not work since it treats the data as if it were encoded as multipart/form-data
. Therefor I need to write the data as a query string, properly escaped, into the send method of the XMLHttpRequest
.
addEntryForm.addEventListener('submit', function(event) {
// Gather form data
var formData = new FormData(this);
// Array to store the stringified and encoded key-value-pairs.
var parameters = []
for (var pair of formData.entries()) {
parameters.push(
encodeURIComponent(pair[0]) + '=' +
encodeURIComponent(pair[1])
);
}
var httpRequest = new XMLHttpRequest();
httpRequest.open(form.method, form.action);
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === XMLHttpRequest.DONE) {
if (httpRequest.status === 200) {
console.log('Successfully submitted the request');
} else {
console.log('Error while submitting the request');
}
}
};
httpRequest.send(parameters.join('&'));
// Prevent submitting the form via regular request
event.preventDefault();
});
现在,带有 for ... of
循环等的整个事情似乎有点令人费解.有没有更简单的方法将 FormData
转换为查询字符串?或者我可以用不同的编码发送 FormData 吗?
Now this whole thing with the for ... of
loop, etc. seems a bit convoluted. Is there a simpler way to transform FormData
into a query string? Or can I somehow send FormData with a different encoding?
推荐答案
你可以使用 URLSearchParams
const queryString = new URLSearchParams(new FormData(myForm)).toString()
这篇关于将 FormData 转换为查询字符串的更简单方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将 FormData 转换为查询字符串的更简单方法
基础教程推荐
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01
- 直接将值设置为滑块 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01