Điều đặc biệt về FormData
là các phương thức mạng, chẳng hạn như fetch
, có thể chấp nhận đối tượng FormData
làm phần thân. Nó được mã hóa và gửi đi với
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
0Từ quan điểm của máy chủ, nó trông giống như một biểu mẫu gửi thông thường
Trước tiên hãy gửi một biểu mẫu đơn giản
Như bạn có thể thấy, đó gần như là một lớp lót
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
Trong ví dụ này, mã máy chủ không được trình bày, vì nó nằm ngoài phạm vi của chúng tôi. Máy chủ chấp nhận yêu cầu POST và trả lời "Người dùng đã lưu"
Chúng tôi có thể sửa đổi các trường trong FormData
bằng các phương thức
2 – thêm một trường biểu mẫu vớiformElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
3 vàformElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
4 đã cho,formElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
5 – thêm một trường như thể nó làformElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
6, đối số thứ baformElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
7 đặt tên tệp [không phải tên trường biểu mẫu], vì đây là tên của tệp trong hệ thống tệp của người dùng,formElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
8 – xóa trường vớiformElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
3 đã cho,formElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
0 – lấy giá trị của trường vớilet formData = new FormData[]; formData.append['key1', 'value1']; formData.append['key2', 'value2']; // List key/value pairs for[let [name, value] of formData] { alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2 }
3 đã cho,formElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
2 – nếu tồn tại trường có giá trịlet formData = new FormData[]; formData.append['key1', 'value1']; formData.append['key2', 'value2']; // List key/value pairs for[let [name, value] of formData] { alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2 }
3 đã cho, trả vềformElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
4, nếu không thì trả vềlet formData = new FormData[]; formData.append['key1', 'value1']; formData.append['key2', 'value2']; // List key/value pairs for[let [name, value] of formData] { alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2 }
5let formData = new FormData[]; formData.append['key1', 'value1']; formData.append['key2', 'value2']; // List key/value pairs for[let [name, value] of formData] { alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2 }
Về mặt kỹ thuật, một biểu mẫu được phép có nhiều trường có cùng tên
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
3, do đó, nhiều cuộc gọi tới let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
7 sẽ thêm nhiều trường cùng tên hơnNgoài ra còn có phương thức
let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
8, với cú pháp tương tự như let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
7. Sự khác biệt là
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
0 xóa tất cả các trường có
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
3 đã cho, sau đó nối thêm một trường mới. Vì vậy, nó đảm bảo rằng chỉ có một trường có
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
3 như vậy, phần còn lại giống như let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
7
4,Picture: formElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user-avatar', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
5Picture: formElem.onsubmit = async [e] => { e.preventDefault[]; let response = await fetch['/article/formdata/post/user-avatar', { method: 'POST', body: new FormData[formElem] }]; let result = await response.json[]; alert[result.message]; };
Ngoài ra, chúng tôi có thể lặp lại các trường formData bằng cách sử dụng vòng lặp
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
6let formData = new FormData[];
formData.append['key1', 'value1'];
formData.append['key2', 'value2'];
// List key/value pairs
for[let [name, value] of formData] {
alert[`${name} = ${value}`]; // key1 = value1, then key2 = value2
}
Biểu mẫu luôn được gửi dưới dạng
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
0, bảng mã này cho phép gửi tệp. Vì vậy, _________6 trường cũng được gửi, tương tự như gửi biểu mẫu thông thườngĐây là một ví dụ với hình thức như vậy
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
Như chúng ta đã thấy trong chương Tìm nạp, thật dễ dàng để gửi dữ liệu nhị phân được tạo động. g. một hình ảnh, như
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
9. Chúng tôi có thể cung cấp trực tiếp dưới dạng tham số fetch
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
1Tuy nhiên, trên thực tế, việc gửi một hình ảnh không riêng biệt mà là một phần của biểu mẫu, với các trường bổ sung, chẳng hạn như “tên” và siêu dữ liệu khác, thường rất thuận tiện.
Ngoài ra, các máy chủ thường phù hợp hơn để chấp nhận các biểu mẫu được mã hóa nhiều phần, thay vì dữ liệu nhị phân thô
Ví dụ này gửi một hình ảnh từ
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
2, cùng với một số trường khác, dưới dạng biểu mẫu, sử dụng FormData
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
Xin lưu ý cách hình ảnh
Picture:
formElem.onsubmit = async [e] => {
e.preventDefault[];
let response = await fetch['/article/formdata/post/user-avatar', {
method: 'POST',
body: new FormData[formElem]
}];
let result = await response.json[];
alert[result.message];
};
9 được thêm vàoformData.append["image", imageBlob, "image.png"];
Điều đó giống như nếu có
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
5 trong biểu mẫu và khách truy cập đã gửi một tệp có tên
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
6 [đối số thứ 3] với dữ liệu
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
7 [đối số thứ 2] từ hệ thống tệp của họMáy chủ đọc dữ liệu biểu mẫu và tệp, như thể đó là một lần gửi biểu mẫu thông thường
các đối tượng được sử dụng để nắm bắt biểu mẫu HTML và gửi nó bằng cách sử dụng fetch
hoặc một phương thức mạng khác
Chúng ta có thể tạo
canvasElem.onmousemove = function[e] {
let ctx = canvasElem.getContext['2d'];
ctx.lineTo[e.clientX, e.clientY];
ctx.stroke[];
};
async function submit[] {
let imageBlob = await new Promise[resolve => canvasElem.toBlob[resolve, 'image/png']];
let formData = new FormData[];
formData.append["firstName", "John"];
formData.append["image", imageBlob, "image.png"];
let response = await fetch['/article/formdata/post/image-form', {
method: 'POST',
body: formData
}];
let result = await response.json[];
alert[result.message];
}
9 từ một biểu mẫu HTML hoặc tạo một đối tượng hoàn toàn không có biểu mẫu, sau đó nối thêm các trường bằng các phương thức