ajax使用json数组------前端往后台发送json数组及后台往前端发送json数组

1.引子

Json是跨语言数据交流的中间语言,它以键/值对的方式表示数据,这种简单明了的数据类型能被大部分编程语言理解。它也因此是前后端数据交流的主要方式和基础。

2.前端往后台传输json数据

第一步,先应该定义一个JSON对象或JSON数组。json对象是“var jsonObj={“name1”:“value1” , “name2”:“value2” , “name3”:“value3”,…};”的格式定义,而json数组则是以中括号"[ ]"包裹多个json对象的格式定义,如 " var jsonArray= [ {‘name1’:‘value1’, ‘name2’:‘value2’ , …} ,{ ‘_name1’ : ‘_value1’ , ‘_name2’ : ‘_value2’, … } , … ] " 。

<script type="text/javascript">
    <!--定义JSON数组-->
    var jsonStr = [ {
        "empNo" : "1242",
        "deptName" : "销售部",
        "password" : "24284",
        "hobbys" : "跳舞 上网",
        "empName" : "小五",
        "sex" : "男",
        "infor" : "好学生"
    }, {
        "empNo" : "1254",
        "deptName" : "技术部",
        "password" : "24224",
        "hobbys" : "跳舞  唱歌",
        "empName" : "小明",
        "sex" : "女",
        "infor" : "一个漂亮的女孩"
    } ];

</script>

第二步定义ajax方法。ajax方法中的data参数要注意写法,不能直接以键值对的方法设置,要用大括号{}包裹起来的键/值对方式定义,并且用JSON.stringify()方法将json对象转为字符串形式。如果不使用**JSON.stringify()**方法,后台的java代码将不能获得json对象。

<a href="javascript:sendJson()">发送Json数据</a>

<script type="text/javascript">
    <!--发送json数据到servlet处理 -->
    function sendJson() {
        $.ajax({
            type : "POST",
            url : "http://localhost:8080/jspdemo/servlet/EmployeeServlet?action=getJsonObj",
            data : {
                ‘jsonObj‘ : JSON.stringify(jsonStr) //将原始json对象转为String
            },
            success : function(msg, status) {
                alert("请求提交后得到了成功的响应");
            }
        });
    }
    </script>

servlet类中定义的方法,用阿里巴巴的fastjson工具包中JSONArray.parseArray(String text, Class clazz)方法,将键值对方式排列的字符串形式的json数组解析为java数组对象。

   public void getJsonObj(HttpServletRequest request, HttpServletResponse response)
    {
        String empStr = request.getParameter("jsonObj");
        System.out.println("empjson字符串" + empStr);
       List< Employee> emps = JSONArray.parseArray(empStr,Employee.class);
       System.out.println("json传到后台的Employee数据:" );
       for(Employee emp: emps){
          System.out.println(emp);

       }
    }

  

控制台输出

3.后台往前端传输json数据

第一步,先在servlet中定义方法,用阿里巴巴的fastjson工具包中JSONArray.toJSON(Object javaObject) 将java对象转化为json数据形式的字符串。将此字符串用PrintWriter的print()方法发送到前端

  public void getEmpList(HttpServletRequest request, HttpServletResponse response)
    {
        List<Employee> empList = generateEmployeeList();
        for(Employee emp: empList){
            System.out.println(emp);
         }
        try
        {
            //转为json数据形式的字符串
response.getWriter().print(JSONArray.toJSON(empList).toString());
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

第二步,用ajax方法请求后台的servlet的相应方法。在设置ajax的可选参数"dataType"应当设置为"json",这样显式地声明返回数据类型是json格式,可以直接用其下标取出其中的元素。如果省略此参数,“dataType"默认是"text”,则需要先用函数 eval("("+data+")")将其转化为json格式,然后再循环遍历json数组其中的元素 。

<script type="text/javascript">
<!-- ajax显示全部 方法-->
    function ajaxQueryAll() {
        $.ajax({
            type : "POST",
            url : "http://localhost:8080/jspdemo/servlet/EmployeeServlet?action=getEmpList",
            /* dataType参数若没写,需要先用函数"var $result=eval(‘(‘+data+‘)‘);"转化为json格式 ,
            再遍历 $result中的元素 */
            dataType : "json",
            success : function(data) {
                var $tbody = $("#table-main");
                var $data = $(data);
                /* 以下标遍历 */
                    /* for (var i = 0; i < data.length; i++) {
                        $tbody.append("<tr >");
                        $tbody.append("<td>" + data[i].empNo + "</td>");
                        $tbody.append("<td>" + data[i].empName + "</td>");
                        $tbody.append("<td>" + data[i].sex + "</td>");
                        $tbody.append("<td>" + data[i].deptName + "</td>");
                        $tbody.append("<td>" + data[i].hobbys + "</td>");
                        $tbody.append("<td>" + data[i].infor + "</td>");
                        $tbody.append("</tr >");
                    }
                     */
        /*forEach循环遍历  */
                $data.each(
                    function() {
                        $tbody.append("<tr >");
                        $tbody.append("<td>" + this.empNo + "</td>");
                        $tbody.append("<td>" + this.empName + "</td>");
                        $tbody.append("<td>" + this.sex + "</td>");
                        $tbody.append("<td>" + this.deptName + "</td>");
                        $tbody.append("<td>" + this.hobbys + "</td>");
                        $tbody.append("<td>" + this.infor + "</td>");
                        $tbody.append("</tr >");
                    }
                );
            }
        });
    }
    </script>

    <input type="button" onClick="ajaxQueryAll()" value="ajax查询所有" />
    <table width="400px" align="center" border="1px"
        style="background-color:orange;">
        <thead>
            <tr>
                <th>员工编号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>部门</th>
                <th>爱好</th>
                <th>附加信息</th>
            </tr>
        </thead>
        <tbody id="table-main">
        </tbody>
    </table>

控制台输出

                前端页面显示

原文地址:https://www.cnblogs.com/gocode/p/11111963.html

时间: 2024-10-10 02:00:56

ajax使用json数组------前端往后台发送json数组及后台往前端发送json数组的相关文章

ajax的data传递数组时,前台不报错,后台不进断点

ajax的data中传递数组数据时,需加traditional:true, //默认false 不添加会导致后台接收不到改参数,后台controller中的方法不会执行,前后台都没有报错 $.ajax({ type:'post', async:false, url:'/emergencyPlanDigital/addPointAssociation', data:{ superId:$('#pointId').val(), childrenIds:childrenIds }, dataType:

Javascript 设置cookie 后台php获得cookie 并读出在前端所点击过的图片

最近需要些一个小Demo,前端页面通过javascript设置cookie ,后台页面通过cookie读取cookie 并在另一张页面上输出在前端点击过的图片. 具体实现方法: ody>  <div  style="text-align:center">   <h2  id="h2">图片信息</h2>   <div id="showPic">       </div>      

Postman发送请求,及后台接收

一.前言 在使用postman工具测试api接口的时候,如何使用 json 字符串传值呢,而不是使用 x-www-form-urlencoded 类型,毕竟通过 key-value 传值是有局限性的.假如我要测试批量插入数据的接口呢,使用 x-www-form-urlencoded 方法根本就不适用于这种场景. 那么如何通过postman工具使用json字符串传值呢,这里就引申出来了spring的两个注解: @RequestParam @RequestBody 总而言之,这两个注解都可以在后台接

[SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据

通过SoapUI发送POST请求,请求的body是JSON格式的数据: data={"currentDate":"2015-06-19","reset":true} 而且通过Fiddler抓取页面报文 Content-Type 是 application/x-www-form-urlencoded 一开始我将Content-Type = application/x-www-form-urlencoded 加到Header 里面. SoapUI里面

【PC网站前端架构探讨系列】关于中小型PC网站前端架构方案的讨论与实践

 说在前面 好几天没更新这个系列文章了,这段时间还是在研究这块东西,遇到的各种奇葩问题,最后写完,只是调试就花了两天,果然发现在和大神之间的距离越来越远,在加上大部分时间在追求自己的梦想,梦想同样也是遥遥无期啊!一直在思考星星的那句话,人到底该不该追求梦想,做个咸鱼到底好不好的,吃吃喝喝睡睡的,反正最近感悟挺多,抽时间写个文章,好好和大家聊聊,把我的心里话告诉大家,程序员不容易,寻梦者更难啊!比如,这个所谓的pc网站的前端框架,这对一个做后台而且还是多年一直在做C#.JAVA没怎么写脚本的我来说

前端性能优化(一):桌面浏览器前端优化策略

摘要: 前端性能优化是一个很宽泛的概念,本书前面的部分也多多少少提到一些前端优化方法,这也是我们一直在关注的一件重要事情.配合各种方式.手段.辅助系统,前端优化的最终目的都是提升用户体验,改善页面性能,我们常常竭尽全力进行前端页面优化,但却忽略了这样做的效果和意义.先不急于探究前端优化具体可以怎样去做,先看看什么是前端性能,应该怎样去了解和评价前端页面的性能. 通过性能测速和分析,我们基本可以获取收集到页面上大部分的具体性能数据,如何根据这些数据采取适当的方法和手段对当前的页面进行优化呢?目前来

【前端福利】用grunt搭建自动化的web前端开发环境-完整教程

jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过.但是不会熟练使用grunt,那你就真的真的真的out了(三个"真的"重复,表示重点).至于grunt的作用,这里不详细说了,总之你如果做web前端开发,你一定要用grunt.还有一点,它完全免费,没有盗版.既强大又免费的东西,为何不用? 当然了,你如果你能找到更好的替代grunt的其他工

ASP.NET MVC搭建项目后台UI框架—1、后台主框架

目录 ASP.NET MVC搭建项目后台UI框架-1.后台主框架 ASP.NET MVC搭建项目后台UI框架-2.菜单特效 ASP.NET MVC搭建项目后台UI框架-3.面板折叠和展开 ASP.NET MVC搭建项目后台UI框架-4.tab多页签支持 ASP.NET MVC搭建项目后台UI框架-5.Demo演示Controller和View的交互 ASP.NET MVC搭建项目后台UI框架-6.客户管理(添加.修改.查询.分页) ASP.NET MVC搭建项目后台UI框架-7.统计报表 ASP

Android开发:JSON简介及最全面解析方法(Gson、AS自带org.json、Jackson解析)

前言 今天,我们来介绍现今主流的数据交换格式-JSON! 同样作为主流为数据交换格式-XML,如果有兴趣可以阅读我写的XML及其DOM.SAX.PULL解析方法和对比 目录 JSON简介&解析方法介绍.png 定义 JavaScript Object Notation,JavaScript的对象表示法,是一种轻量级的文本数据交换格式. 作用 用于数据的标记.存储和传输. 特点 轻量级的文本数据交换格式 独立于语言和平台 具有自我描述性 读写速度快,解析简单 语法 JSON值 名称/值 数组 对象

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.