浅鱼

post请求的Query与body中的form-data、x-www-form-urlencoded、raw、binary区别+请求方法总结
0、Query通过query来传递参数,相当与在 url 地址后面拼接参数。ajax请求中使用query方式来传递...
扫描右侧二维码阅读全文
14
2018/12

post请求的Query与body中的form-data、x-www-form-urlencoded、raw、binary区别+请求方法总结

0、Query

通过query来传递参数,相当与在 url 地址后面拼接参数。ajax请求中使用query方式来传递参数的案例:

$.ajax({
    type: 'post',
    url: base_url + '/proced/addTemplate?templateName='+template_name,
    datatype: 'json',
    data: JSON.stringify(form_arr),
    contentType : "application/json",              //发送至服务器的类型
    success: function(data){
      if(data.status === 0){
        console.log(data);
      }
    }
  });

1、form-data:

等价于http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
form-data.png

2、x-www-form-urlencoded:

等价于application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23
x-www-form-urlencoded.png

3、raw

可以上传任意格式的文本,可以上传text、json、xml、html等
raw.png

raw格式数据ajax请求的代码如下:

$.ajax({
    type: 'post',
    url: base_url + '/student/updateStudent',
    data: JSON.stringify({
      'sid': sid,
      'batch_name': batch_name,
      'sname': sname,
      'clazz': clazz
    }),
    contentType : "application/json",              //发送至服务器的类型
    dataType : "json",
    success: function(data){
      console.log(data);
    }
  });

重点在于2点:1、使用JSON.stringify将对象转成字符串;2、添加这句话contentType : "application/json",点明发送至服务器的数据类型。

4、binary

相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

multipart/form-data与x-www-form-urlencoded区别

multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;
x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

Last modification:December 14th, 2018 at 03:38 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment