AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
在前端对后端进行数据请求时,http的请求参数一般分为三种:Query String Parameters、Request Payload、Form Data。以下以axios为例。 ***** **Query String Parameters**: 先说Query String Parameters,这种请求参数是用url string的形式进行传递,即?后面拼user=yyj&password=123这种字符串,不同key:value用&进行分割。一般这种请求是用在get请求,可是根据我请求过的接口来看,这并不局限于get请求,post请求也能用,主要还是看后端给的接口。 ***** **Request Payload**: 当请求头里面的content-type为application/json时,就是Request Payload形式的请求。实际开发遇到后端要求这种请求,一般用于大量json数据的处理,或文件的上传之类的。记得一定要在请求里指定'Content-Type':'application/json'。下面示例: ``` axios.post("url", params , { 'Content-Type':'application/json' }).then((res) => { console.log(res); }).catch((error) => { console.log(error); }); ``` 而且不同的http请求并不是孤立的,比如Query String Parameters+Request Payload的混合请求,一般用于数据格式比较多的情况,或者后端要求这样的请求,示例如下: ``` axios.post("url?"+string, params, { 'Content-Type':'application/json' }).then((res) => { console.log(res); }).catch((error) => { console.log(error); }); ``` string就是user=yyj&password=123这种字符串,如果这串字符串比较长,可是先写成对象形式,然后转成这种字符串。下面提供一下我百度到的一个简单好用的方法: ``` function (obj) { Object.keys(obj).map(function (key) { return encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]); }).join("&"); } ``` ***** **Form Data**: 这种方式也非常常用,一般未指定content-type时会默认这种。它的参数会以Form Data的形式进行传递,不会显式出现在请求url中。我刚开始学习axios请求时,会直接把要传递的参数类似于Request Payload一样放在后面,然后发现参数根本没有传到后端。于是经过请教对数据进行了一下处理,方法如下: ``` function (jsonParam) { let nodeData =""; if(jsonParam){ for(var i in jsonParam){ if(jsonParam[i] || jsonParam[i]===0 || jsonParam[i]==='0'){ nodeData += "&"+i+"=" +jsonParam[i]; } } if(nodeData){ nodeData = nodeData.slice(1); } } return nodeData; } ``` 经过此方法处理过的数据就能正确传到后端了。 ***** 参考链接: [https://www.jianshu.com/p/c81ec1a547ad]()