在前端開發中,當我們要將資料傳送到伺服器時,常見的資料格式有 JSON、FormData、URLSearchParams
這些都是資料包裝的格式,它們的用法和情境都不同,就來一一介紹它們~
{
"name": "Joanne",
"age": 21
}
Content-Type: application/json
前端要把物件轉成 JSON 字串,再傳給後端
JSON.stringify()
:物件變 JSON
JSON.parse()
:JSON 變物件
fetch("http://localhost:5000/api", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ name: "Joanne", age: 21 })
});
multipart/form-data
格式傳送------WebKitFormBoundaryabc123
Content-Disposition: form-data; name="name"
Joanne
------WebKitFormBoundaryabc123
Content-Disposition: form-data; name="age"
21
------WebKitFormBoundaryabc123--
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryabc123
// new 一個空的 FormData
const formData = new FormData();
// 從html的 <form> 生成
const formElement = document.querySelector("form");
const formData2 = new FormData(formElement);
formData.append("name", "Joanne");
formData.append("age", 21);
formData.append("avatar", fileInput.files[0]); // 可以放檔案
// 不需要手動設定 Content-Type,瀏覽器會自動加上 multipart/form-data; boundary=...
// 加入資料
fetch("http://localhost:5000/upload", {
method: "POST",
body: formData
});
<form>
一樣格式的資料URLSearchParams
是一個專門處理 URL 查詢字串 的物件key=value&key=value
application/x-www-form-urlencoded
格式name=Joanne&age=21
Content-Type: application/x-www-form-urlencoded
// new 一個空的URLSearchParams
const params = new URLSearchParams();
// 一次放入
const params2 = new URLSearchParams({ name: "Joanne", age: 21 });
// 從 URL 解析
const url = new URL("https://example.com?page=2&sort=asc");
const params3 = new URLSearchParams(url.search);
// 加入資料
params.append("name", "Joanne");
params.append("age", 21);
// Get Request
fetch("http://localhost:5000/search?" + params.toString());
// http://localhost:5000/search?name=Joanne&age=21
https://developer.mozilla.org/zh-TW/docs/Web/API/FormData/get
https://medium.com/itsems-frontend/javascript-json-stringify-and-json-parse-7a1251d3824c