当前位置: 首页 > 后端技术 > PHP

vue的axios组件是如何与PHP后台交换数据的

时间:2023-03-29 14:41:49 PHP

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方法2.PHP后端使用php://input获取原始数据在前端没有变化的时候,由于无法解析预定义变量$_POST,php后端只能通过php://input获取原始数据,再转换成想要的数据形式。如果PHP后台使用native进行开发,可以自定义一个函数来处理每个请求的数据。如果PHP后台是使用特定的框架开发的,那要看框架本身是否支持处理php://input。一个简单的测试方法是在框架源码全文中搜索php://input。如果能找到,说明支持,否则不支持,需要自己扩展相关处理代码。以PHP框架yii2.0为例,全文搜索vendor目录,可以看到yiisoft->yii2->web->Request.php的494行有相关处理代码。实际使用时,只需在配置文件中配置'components'即可web.php=>['request'=>['parsers'=>['application/json'=>'yii\web\JsonParser'],//otherconfigurations],//其他组件配置]以上是前端处理和后端处理的两种方案,可以根据实际情况选择

最新推荐
猜你喜欢