THINKPHP__THINKPHP6接收ajax下拉菜单提交的数据,存在的bug
Posted 秦皇汉武
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了THINKPHP__THINKPHP6接收ajax下拉菜单提交的数据,存在的bug相关的知识,希望对你有一定的参考价值。
反思:
国产总是不尽人意,但是要支持国产。
Thinkphp的6接收ajax的post数据,存在一个bug。即ajax传递的json数据,在thinkphp后端解析出来后,并非直接的json格式。
描述:
三级联动,此处不赘述如何实现。以省市县为例,当点击省的下拉菜单时,我们设置监听函数:
layui.use([\'form\',\'cjgl\'], function(){ var config = { s1: \'xunliandui_id\', s2: \'xunlianying_id\', s3: \'xunlianlian_id\', v1: null,//默认的训练队id v2: null,//默认的训练营id v3: null,//默认的训练连id }; var form = layui.form; form.on(\'select(\' + config.s1 + \')\', function(data){ cityEvent(data); }); function cityEvent(data) { // alert(\'yes\'); var $ = layui.jquery; var $form = $(\'form\'); $form.find(\'select[name=\' + config.s2 + \']\').html(""); // alert(\'no\'); var myjson = JSON.stringify({parent_id:data.value}); // $.post("/system/school/xiajidanwei",myjson,function(result){ // // },\'JSON\'); $.ajax({ url:"/system/school/xiajidanwei",//查询下级子单位 type:"post", data:myjson, dataType:\'json\', success:function(result){ if(result.code == 0) { alert(\'xxx\'); $.each(result.data, function(index,item){ console.log(item); }); }else{ layer.msg(result.msg); } }, error:function(xhr,status,error) { layer.msg(\'数据处理错误\',{ icon: 2, time: 2000 //2秒关闭(如果不配置,默认是3秒) }); } }); } });
上述代码中,使用的是layui的jquery,无论是$.post还是$.ajax,其功能同。
当点击下拉菜单进行选择后,会执行js的cityEvent函数。
我们构造json字符串,即myjson。
但是,thinkphp后端利用$_POST接收的内容为:
因此,我们的后端需要特殊处理:
public function ajaxData2() { // 获取参数 $a=array(); $a[0]=1000; $src = $this->request ->only([ \'parent_id\' => \'\' ],\'POST\'); // 实例化 // $parent_id=$_POST["parent_id"]; foreach($_POST as $key=>$value){ $key=json_decode($key); $parent_id=$key->{"parent_id"}; if($parent_id){ break; } } $sch = new sch; $data = $sch->where(\'status\',1)->where(\'parent_id\',$parent_id)->select(); $data = reSetObject($data, $src); return json($data); }
利用foreach取出$_POST的索引值,然后转化为json,再取出parent_id中的数据。
结论:
jquery.ajax以json传递的数据,在thinkphp6的后端,变成了数组的索引。而非json数据。
国产的库和框架,需要加油啊。
以上是关于THINKPHP__THINKPHP6接收ajax下拉菜单提交的数据,存在的bug的主要内容,如果未能解决你的问题,请参考以下文章