继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

axios请求JSON问题详解

所谓伊人_在水一方
关注TA
已关注
手记 273
粉丝 24
获赞 169

  1. 当参数是JSON对象时,默认的Content-Type是application/json。

    axios.post('/user', {    firstName: 'Fred',    lastName: 'Flintstone'  })  .then(function (response) {    console.log(response);  })  .catch(function (error) {    console.log(error);  });

    此时传递的参数是Request Payload格式{firstName:"Fred",lastName:"Flintstone"}  

    如果出现No 'Access-Control-Allow-Origin' header is present on the requested resource的错误,则是跨域问题。本人喜欢直接配置服务器来解决跨域:例如Nginx配置:Nginx配置跨域请求

  2. 当参数是JSON字符串时,默认的Content-Type是application/x-www-form-urlencoded。

    axios.post('/user', JSON.stringify({    firstName: 'Fred',    lastName: 'Flintstone'  }))  .then(function (response) {    console.log(response);  })  .catch(function (error) {    console.log(error);  });

    此时传递的参数是Form Data格式key : value

    {"firstName":"Fred","lastName":"Flintstone"}:

    如上。其实这是一个无效的数据,key为{"firstName":"Fred","lastName":"Flintstone"},value为空。

  3. 要想使用application/x-www-form-urlencoded格式,需要进行数据转换,虽然有两种方式URLSearchParamsqs两种方式。我更喜欢使用qs库的方式,代码如下:

    axios.interceptors.request.use((req) => {    if (req.method === 'post') {     req.data = qs.stringify(req.data);    }    return req;}, (error) => Promise.reject(error));

    之后使用axios的时候,只需要传递json对象就可以:

    axios.post('/user', {    firstName: 'Fred',    lastName: 'Flintstone'  })  .then(function (response) {    console.log(response);  })  .catch(function (error) {    console.log(error);  });

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP