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