一、前端formdata格式傳遞參數(shù)
前端通過表單或ajax請求時,通常使用formdata格式傳遞參數(shù)。利用表單的方式傳遞參數(shù)相對簡單,只需要設(shè)置表單的enctype屬性為"multipart/form-data"即可。ajax請求時,需要創(chuàng)建FormData對象,并使用append()方法添加鍵值對,示例如下:
let formData = new FormData();
formData.append("username", "admin");
formData.append("password", "123456");
$.ajax({
url: "/login",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function(data) {
console.log(data);
}
});
二、formdata格式傳參數(shù)
formdata格式的參數(shù)傳遞支持多種數(shù)據(jù)類型,如文本、文件等。對于文本數(shù)據(jù),可以直接使用FormData對象的append()方法添加鍵值對;對于文件數(shù)據(jù),則需要通過File對象創(chuàng)建,再使用FormData的append()方法添加。示例如下:
let formData = new FormData();
formData.append("username", "admin");
formData.append("file", file); // file為File對象
$.ajax({
url: "/upload",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function(data) {
console.log(data);
}
});
三、formdata格式參數(shù)樣式
formdata格式的參數(shù)傳遞樣式與常規(guī)的鍵值對數(shù)據(jù)相似,使用鍵值對的形式添加參數(shù),示例如下:
Content-Disposition: form-data; name="username"
admin
四、formdata數(shù)據(jù)格式請求
在服務(wù)器端接收formdata格式傳遞參數(shù)時,需要使用特殊的解析方式。對于表單的方式傳遞,可以使用multipart/form-data格式解析;對于ajax請求,需要使用流的方式解析。示例如下:
// 解析multipart/form-data格式
const busboy = new Busboy({ headers: req.headers });
busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
// file為File對象
});
busboy.on("field", (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => {
// val為字段值
});
req.pipe(busboy);
// 解析流
const form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
// fields為鍵值對數(shù)據(jù),files為文件數(shù)據(jù)
});
五、formdata和json傳遞的區(qū)別
formdata格式和json格式都是一種常用的參數(shù)傳遞方式。formdata格式主要用于傳遞二進(jìn)制數(shù)據(jù)或文件,而json格式則用于傳遞結(jié)構(gòu)化數(shù)據(jù)。
在使用ajax請求時,如果需要傳遞二進(jìn)制數(shù)據(jù)或文件,則必須使用formdata格式;如果傳遞結(jié)構(gòu)化數(shù)據(jù),則可以使用json格式。示例如下:
$.ajax({
url: "/login",
type: "POST",
data: { username: "admin", password: "123456" }, // json格式
success: function(data) {
console.log(data);
}
});
$.ajax({
url: "/upload",
type: "POST",
data: formData, // formdata格式
processData: false,
contentType: false,
success: function(data) {
console.log(data);
}
});
六、formdata是什么
FormData是一種對象類型,可以用來獲取表單元素的值,創(chuàng)建鍵值對數(shù)據(jù)或者二進(jìn)制數(shù)據(jù),然后使用XMLHttpRequest或fetch API將數(shù)據(jù)提交到服務(wù)器端。可以使用append()添加鍵值對或二進(jìn)制數(shù)據(jù),使用delete()刪除鍵值對數(shù)據(jù),使用entries()獲取一個用于迭代所有鍵值對的迭代器,使用get()獲取指定鍵名的鍵值對數(shù)據(jù)等等。示例如下:
let formData = new FormData();
formData.append("username", "admin");
formData.append("file", file);
console.log(formData.get("username")); // admin
console.log(formData.getAll("file")); // [File]
console.log(formData.entries()); // 返回一個迭代器
formData.delete("username");
console.log(formData.has("username")); // false