ajax传formdata类型的数据_ajax post数据发送类型Content-Type详解

application/x-www-form-urlencoded

首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。例如 PHP 中,$_POST['title'] 可以获取到 title 的值,$_POST['sub'] 可以得到 sub 数组。

case1: 表单自动提交

提交

Form data : name=123&age=123

case2: Jquery.ajax post类型的默认发送类型

Jquery.ajax({

url: '/jquery-urlencoded',

type: 'post',

data: {

a: 1, b: 2,

c: { a: 1, b: 2 }

},

success: () => { },

error: err => console.log(err)

})

Form Data : a=1&b=2&c%5Ba%5D=1&c%5Bb%5D=2

case3: 修改axios的默认请求头并转化数据格式

Axios({

url: "/axios-urlencoded",

method: "post",

headers: {

"Content-Type": "application/x-www-form-urlencoded;charset:UTF-8"

},

data: qs.stringify({

a: 1, b: 2,

c: { a: 1, b: 2 }

})

}).then(() => { })

Form Data : a=1&b=2&c%5Ba%5D=1&c%5Bb%5D=2

在使用axios时,修改Content-Type(默认值application/json),并且用qs转化数据格式,也是因为后台语言更支持application/x-www-form-urlencoded类型,否则某些后台语言、框架会接收不到数据

multipart/form-data

case1 : ajax post提交的数据为FormData对象时, Content-Type自动设置为multipart/form-data

const xhr = new XMLHttpRequest();

const fd = new FormData();

fd.append('name', 'liyang');

fd.append('avatar', this.$refs.image.files[0]);

xhr.open("POST", '/native-ajax-form-data', true);

xhr.onreadystatechange = function () {

if (xhr.readyState == 4 && xhr.status == 200) {

alert(xhr.responseText); // handle response.

}

};

xhr.send(fd)

------WebKitFormBoundaryEUDwjVQS6V8tkel4

Content-Disposition: form-data; name="name"

liyang

------WebKitFormBoundaryEUDwjVQS6V8tkel4

Content-Disposition: form-data; name="avatar"; filename="upload.png"

Content-Type: image/png

------WebKitFormBoundaryEUDwjVQS6V8tkel4--

case 2: form enctype属性设置为multipart/form-data时

提交

------WebKitFormBoundarymbGh3Kll05jGm3Zt

Content-Disposition: form-data; name="name"

liyang

------WebKitFormBoundarymbGh3Kll05jGm3Zt

Content-Disposition: form-data; name="age"

13

------WebKitFormBoundarymbGh3Kll05jGm3Zt--

application/json

用于提醒后台提交的是json字符串形式的数据。优点在于传输{a:[{a:[1,2,3]}]}这种复杂结构的数据,使用json形式要比键值对形式更直观更方便,后台接收到数据后,直接转化类型即可使用

case1 : axios post默认格式

Axios.post('/axios', {

a: 1, b: 2,

c: { a: 1, b: 2 }

}).then(res => {

console.log(res)

}).catch(err => {

console.log(err)

})

Request Payload : {"a":1,"b":2,"c":{"a":1,"b":2}}

case 2 : jquery设置Content-type,并转化数据为字符串

Jquery.ajax({

url: '/jquery-application-json',

type: 'post',

processData: false,

contentType: "application/json;charset=UTF-8",

data: JSON.stringify({

a: 1, b: 2,

c: { a: 1, b: 2 }

}),

success: () => { },

error: err => console.log(err)

})

Request Payload : {"a":1,"b":2,"c":{"a":1,"b":2}}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值