发送时 ajax POST FormData 对象键和值未按设置
When sending ajax POST FormData object key and value are not as set
我正在以编程方式设置 FormData,如下所示:
const formData = new FormData();
formData.append('id', '12345678');
之后,我将使用此对象发送 POST 请求。 (使用 angular HttpClient)。
我正在使用 Postman 调试请求并通过将请求导入为 cURL 查看发送了哪些值,我发现 formData 值显示不同。
key:------WebKitFormBoundaryI1mdsdmKkradYVMS\r\nContent-Disposition: form-data; name
value: "id"\r\n\r\n12345678\r\n------WebKitFormBoundaryI1mdsdmKkradYVMS--\r\n
我做错了什么?
我想发送数据,以便服务器将收到带有以下对象的 x-form-urlencoded 请求:
key: id
value: 12345678
编辑:解决方案是这样的:
const body = new URLSearchParams({id: "12345678"});
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded',
})
};
return this.http.post(url, body.toString(), httpOptions).pipe(mergeMap( (response:any) => {
console.log('response ', response);
return of (response);
}));
谢谢,
亚龙
FormData 个对象默认生成 multipart/form-data
,而不是 application/x-www-form-urlencoded
。
它们是为处理 application/x-www-form-urlencoded
中没有标准编码方法的文件上传而设计的。
如果要生成 application/x-www-form-urlencoded
数据,请使用 URLSearchParams object。
const formData = new FormData();
formData.append('id', '12345678');
const query = new URLSearchParams(formData);
console.log(query.toString());
@Quentin 的回答都很好,但不适合 Angular。
只需将第二个参数传递给您的 GET 调用即可:
return this.http.get<any>('url', { params: { id: '123456789' }});
添加url参数不需要post请求,不提供正文也不需要post请求。
我正在以编程方式设置 FormData,如下所示:
const formData = new FormData();
formData.append('id', '12345678');
之后,我将使用此对象发送 POST 请求。 (使用 angular HttpClient)。
我正在使用 Postman 调试请求并通过将请求导入为 cURL 查看发送了哪些值,我发现 formData 值显示不同。
key:------WebKitFormBoundaryI1mdsdmKkradYVMS\r\nContent-Disposition: form-data; name
value: "id"\r\n\r\n12345678\r\n------WebKitFormBoundaryI1mdsdmKkradYVMS--\r\n
我做错了什么?
我想发送数据,以便服务器将收到带有以下对象的 x-form-urlencoded 请求:
key: id
value: 12345678
编辑:解决方案是这样的:
const body = new URLSearchParams({id: "12345678"});
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded',
})
};
return this.http.post(url, body.toString(), httpOptions).pipe(mergeMap( (response:any) => {
console.log('response ', response);
return of (response);
}));
谢谢, 亚龙
FormData 个对象默认生成 multipart/form-data
,而不是 application/x-www-form-urlencoded
。
它们是为处理 application/x-www-form-urlencoded
中没有标准编码方法的文件上传而设计的。
如果要生成 application/x-www-form-urlencoded
数据,请使用 URLSearchParams object。
const formData = new FormData();
formData.append('id', '12345678');
const query = new URLSearchParams(formData);
console.log(query.toString());
@Quentin 的回答都很好,但不适合 Angular。
只需将第二个参数传递给您的 GET 调用即可:
return this.http.get<any>('url', { params: { id: '123456789' }});
添加url参数不需要post请求,不提供正文也不需要post请求。