发送Ajax POST FormData对象键和值时未设置

时间:2019-06-03 08:38:47

标签: javascript ajax angular form-data

我以编程方式设置FormData,如下所示:

  public List<Map<String,Object>> GetUserData(Register r) { 
      String sql="select *from user where username='"+r.getUsername()+"' and '"+r.getPassword()+"'"; 

      System.out.println("UN:"+r.getUsername());

      return template.queryForList(sql); }

之后,我将与此对象发送POST请求。 (使用有角度的HttpClient)。

我正在使用Postman调试请求,并通过将请求导入为cURL来查看发送了哪些值,并且看到formData值的显示方式有所不同。

    const formData = new FormData();
    formData.append('id', '12345678');

我在做什么错了?

我想发送数据,以便服务器将接收带有以下对象的x格式的编码请求:

key:------WebKitFormBoundaryI1mdsdmKkradYVMS\r\nContent-Disposition: form-data; name

value: "id"\r\n\r\n12345678\r\n------WebKitFormBoundaryI1mdsdmKkradYVMS--\r\n

编辑:解决方案是这样的:

key: id
value: 12345678

谢谢, 雅伦

2 个答案:

答案 0 :(得分:2)

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());

答案 1 :(得分:0)

@Quentin的回答很好,但不适合Angular。

只需将第二个参数传递给您的GET调用:

return this.http.get<any>('url', { params: { id: '123456789' }});

您不需要发出请求来添加url参数,并且如果您不提供正文,也不需要发布请求。