牛骨文教育服务平台(让学习变的简单)
博文笔记

ThinkPHP3.2.3中典型的ajax获取json数据方法

创建时间:2015-11-01 投稿人: 浏览次数:6161

  AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。对于ajax的异步或同步参数设置(async),js库默认都设置为ture,即异步。当使用async=false 时,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

Js(注意是放在html中,如不是,则ajax的url不能使用框架常量参数_CONTROLLER__)
<!-- 注意:jquery库一定要包含 -->
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function(){    
    $.ajax({
        url: "__CONTROLLER__/getAllOpetatorJsonInfo/",
        type: "POST",
        dataType: "json",
        success: function(data){                                    
            for(var i=0; i < data.length; i++)
            {
                alert(data[i].user_code+" " + data[i].name)
            }
        },
        error: function(){
            alert("获取操作员信息失败");
        }
    });    
});
</script>
控制器
    /*获取收银员所在店的所有操作员json信息*/
    public function getAllOpetatorJsonInfo(){
        $login_user_name = cookie("login_user_name");
        $sql = "select shop_code from t_user where login_name = "%s";";
        $shop_code = M()->query($sql,$login_user_name);

        $sql = "select t_user.user_code,t_user.name from t_user,t_role_user where t_user.login_name = t_role_user.login_name and t_user.shop_code="%s" and t_role_user.role_name="操作员";";
        $data = M()->query($sql,$shop_code[0]["shop_code"]);
        if ($data) {
            //$returnData = json_encode($data);
            $this->ajaxReturn($returnData); 
        } else {
            $data = "";            
            $this->ajaxReturn($returnData);
        }
    }

  php ajaxReturn返回的数据说明

  当返回的数据是一个关联数组时,如果设置了ajax的数据格式为json,则会自动将数组转为json格式,其实在用ajaxReturn这个函数的时候也已经将数组转为jason格式了。测试如下:
  对于上面的代码,用dump()函数打印出来,可知是一个一维的关联数组:

array(size=5)
  "cash" =>string"12.50"(length=5)
  "vip" =>null
  "account" =>string"1.20"(length=4)
  "total_money" =>float13.7
  "count" =>string"7"(length=1)

  ajaxReturn($array)返回这个数组时,已经将数组转为json格式了:

{"cash":"12.50","vip":null,"account":"1.20","total_money":13.7,"count":"7"}

  此时axaj接收数据设置数据格式为json即可,通过data.cash等就可以获取cash数据。接收时就会将数据转化为json格式,因此不需要再用json_encode($array)这个函数来转化为json格式了。

  如果是多维关联数组呢?
  其实都是一样的,区别就是数据引用,多了个下标。
  未json编码之前的dump函数打印:

array(size=3)
  0 =>array(size=3)
      "user_code" =>string"001"(length=3)
      "name" =>string"张三"(length=6)
      "login_name" =>string"zhangsan"(length=8)
  1 =>array(size=3)
      "user_code" =>string"002"(length=3)
      "name" =>string"李四"(length=6)
      "login_name" =>string"lisi"(length=4)
  2 =>array(size=3)
      "user_code" =>string"003"(length=3)
      "name" =>string"王五"(length=6)
      "login_name" =>string"wangwu"(length=6)
未用json_encode()编码之前:
[{"user_code":"001","name":"u5f20u4e09","login_name":"zhangsan"},{"user_code":"002","name":"u674eu56db","login_name":"lisi"},{"user_code":"003","name":"u738bu4e94","login_name":"wangwu"}]
用json_encode()编码之后:
"[{"user_code":"001","name":"\u5f20\u4e09","login_name":"zhangsan"},{"user_code":"002","name":"\u674e\u56db","login_name":"lisi"},{"user_code":"003","name":"\u738b\u4e94","login_name":"wangwu"}]"

  同样的其实不需要用json_encode来编码,当加上也没影响,在ajaxReturn的时候就已经将多维关联数组转化为了json格式。则在接收数据处理时按多维数组来调用就行了:

    //动态的显示操作员的login_name
    $.ajax({
        url: localhostPaht + "/Home/Cashier/getAllOpetatorJsonInfo/",
        type: "POST",
        dataType: "json",
        async : false,
        success: function(data){                                    
            for(var i = data.length - 1; i >= 0; i--)
            {
                if(i == operator)
                    document.getElementById("operator_select").innerHTML = data[i].login_name;
            }
        },
        error: function(){
            alert("获取操作员信息失败");
        }
    }); 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。