zoukankan      html  css  js  c++  java
  • THINKPHP_(5)_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数据。

    国产的库和框架,需要加油啊。

    你永远不知道未来会有什么,做好当下。技术改变世界,欢迎交流。
  • 相关阅读:
    EdgeDB 1.0 Alpha 4 发布了
    静态文件请求路径 rewrite nginx && openresty 实现
    Giving Application Pools Event Log Access
    一张图看懂ASP.NET MVC5认证和授权过滤器的执行顺序
    git check-ignore
    What does “Challenge” term stand for?
    Implementing MVC 5 IAuthenticationFilter
    HttpContext.Current.User is null even though Windows Authentication is on
    When should the volatile keyword be used in C#?
    HttpApplicationState.Remove(String) Method
  • 原文地址:https://www.cnblogs.com/xiaojieshisilang/p/14851699.html
Copyright © 2011-2022 走看看