1.前言axios是vue项目中使用的一个组件,利用ajax技术与后台交换数据。在vue作者的推荐下,相当一部分vue前端开发者开始使用它。但是,在实际开发过程中,有时后端无法接收到前端发布的数据。以PHP语言开发背景为例,PHP原生预定义变量$_POST无法接收(因为解析失败)。本文旨在探讨前后端数据交互,给出不同的解决方案供大家参考。2、目前$_POST可以接收FormData的数据。这个数据形式其实就是一个键值对,比如id:1。如果有多组键值对并嵌套,则如下role-name:tarole-desc:xxxxxxxxxxid:2cloud[cla]:001cloud[cla_baijia]:001cloud[cla_gongkai]:001local[soft5]:001local[soft6]:001mgmt[mgmt-clouditems]:01PHP服务器收到的数据其实是这个role-name=ta&role-desc=xxxxxxxxx&id=2&cloud%5Bcla%5D=001&cloud%5Bcla_baijia%5D=001&cloud%5Bcla_gongkai%5D=001&local%5Bsoft-5%5D=001&local%5Bsoft-6%5D=001&mgmt%5Bmgmt-clouditems%5D=是不是和url的参数很像?这个键值对的数据叫做QueryString,浏览器的原生form在发送这个数据的时候会把请求头设置为application/x-www-form-urlencoded。QueryString可以被PHP的$_POST成功解析。经典前端库jQuery下的jQueryajax的serialize()方法和param()方法是将数据转换为QueryString的解决方案。前者转换表单数据,后者转换JSON数据。而且jQuery的ajax请求会判断传入的数据形式,隐式调用param()方法转换json数据,所以用户只需要直接提供json数据即可成功提交数据到后台,需要显式(手动)调用param()方法的机会不多。jq默认发送的请求头也是application/x-www-form-urlencoded,大多数情况不需要用户手动设置。回到我们的axios,axios默认发送的请求头是application/json。简单的说就是默认会把json传给后端,不会转成QueryString。三、解决方案1、前端将数据转换成QueryString导入到qs库中,调用stringify方法
