前后台数据交互小结

目录

引言

1、ajax

1.1、创建ajax

 1.2、ajax事件

1.3、服务器响应格式

 1.4、ajax使用xmlhttprequest对象读取数据

2、jQuery中使用ajax      

2.1、函数解释

0.jQuery.load()

1.jQuery.get()

扫描二维码关注公众号,回复: 5521707 查看本文章

2.jQuery.post()

3.jQuery.getJSON()           

4.jQuery.ajax() 

2.2、区别

3、$.ajax()日常案例

4、前台提交数据

5、前台获取数据

6、后台获取数据

7、后台发送数据

8、总结


引言

今天写项目中遇到了一个问题,就是前后数据的交互,以前不论是jsp/servlet还是框架,用到的数据交互都是最为简单基础,也不尽如人意。之前想起来学的ajax,不就是做实时异步数据交互的么,尝试着写了写,发现困难重重。因为学的内容都是用get,post获取数据,不论是xml,HTML还是json,今天借着这个机会再次学习一下ajax,也总结一下前后台数据交互有哪些方式。毕竟在开发中这也是一块重点嘛。。。

按我的理解数据交互的内容应当有如下几块:前台发送数据,解析数据,后台发送数据,解析数据

之前使用的前后台交互无外乎以下几种:

  • 表单提交(前台--->后台)
  • 域属性(前台<===>后台)
  • xml总初始化参数(前台)
  • ajax

首先,最原始的,通过form表单以post/get方式提交数据。

当你点击submit按钮时,浏览器会默认把你在input里面输入的数据,以postget的方式提交到form表单中的action这个地址。相当于你提交表单时,就会向服务器发送一个请求,然后服务器会接受并处理提交过来的form表单,最后返回一个新的网页。

1、get提交数据:请求参数(一般为input里的值)拼装成url,相当于向服务器发url请求。

              特点:请求信息封装在URL中,所有人可见,不安全,容量小,胜在速度快。
2、post提交数据:直接向服务器发请求,参数直接发给后台。

              特点:请求信息封装在响应体中,安全,容量大,败在速度慢。

但是,这种方法会导致几个问题:
1、在提交时,页面会发生跳转或刷新,导致用户体验不好。
2、单项提交,把数据提交给后台,但是不知道后台会给出怎样的响应,因为提交后页面就发生跳转了。比如:用户登录,那么就不知道到底是注册成功了还是失败了。
3、浪费宽带。因为前后两个页面中的大部分HTML代码往往是相同的。但由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间,这就导致了用户界面的响应比本地应用慢的多。

为了解决上述问题,2005年出现了Ajax。

1、ajax

1、Ajax的全称是Asynchronous JavaScript and XML,即异步JavaScript+XML
2、它是一种技术方案,但并不是一种新技术。
3、它依赖的是现有的CSS/HTML/Javascript,而其中最核心的依赖是浏览器提供的XMLHttpRequest对象。这个对象为向服务器发送请求和解析服务器响应提供了流畅的接口,使得浏览器可以发出HTTP请求与接收HTTP响应,实现在页面不刷新的情况下和服务端进行数据交互。

1.1、创建ajax

1.建立xmlHttpRequest对象

    if(window.XMLHttpRequest) {
    xmlHttp = new XMLHttpRequest();
    if(xmlHttp.overrideMimeType) {
     xmlHttp.overrideMimeType("text/xml");
    }
   } else if(window.ActiveXobject) {
    var activeName = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
    for(var i = 0; i < activeName.length; i++) {
     try {
      xmlHttp = new ActiveXobject(activeName[i]);
      break;
     } catch(e) {}
    }
   }
   if(!xmlHttp) {
    alert("创建xmlhttprequest对象失败");
   } else {}

2.设置回调函数

   xmlHttp.onreadystatechange= callback;

   function callback(){}

3.使用OPEN方法与服务器建立连接  xmlHttp.open("get","ajax?name="+ name,true)

   此步注意设置http的请求方式(post/get),如果是POST方式,注意设置请求头信息xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

4.向服务器端发送数据

  xmlHttp.send(null);

  如果是POST方式就不为空

5.在回调函数中针对不同的响应状态进行处理

  if(xmlHttp.readyState == 4){       //判断交互是否成功

      if(xmlHttp.status == 200){         //获取服务器返回的数据         //获取纯文本数据

        var responseText =xmlHttp.responseText;

       document.getElementById("info").innerHTML = responseText;

      }

   }

其中最为重要的对象便是xmlHttpRequest了,一切的操作都依赖于此对象,

xmlHttpRequest属性:

  1. onreadystatechange每个状态改变时都会触发这个时间处理器,通常都会调用一个JavaScript函数。
  2. readyState请求的状态,有五个可取指,0=未初始化,1=正在加载,2=已经加载,3=交互中,4=完成。
  3. responseText服务器的响应,表示为一个串,读取text格式数据。
  4. responseXML服务器的响应,表示为xml,这个对象可以解析为dom对象。
  5. status服务器的HTTP状态码(200对应OK,404对应notfount,等)。

xmlHttpRequest方法:

  1. abort()停止当前请求
  2. getAllResponseHeaders()把HTTP请求的所有响应首部作为键值对返回
  3. getResponseHeader("header")返回指定首部的窜值
  4. open("method","url")建立对服务器的调用,其中url可以是相对地址也可以是绝对地址,亦可以带参数如                           xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
  5. send(content)向服务器发送请求
  6. setRequestHeader("header","value");把指定首部设置为所提供的值,在设置任何首部之前必须先调用open()

 1.2、ajax事件

onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

readyState存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

0: 请求未初始化

1: 服务器连接已建立

2: 请求已接收

3: 请求处理中

4: 请求已完成,且响应已就绪

status 200: "OK"

404: 未找到页面

1.3、服务器响应格式

1.3.1、xml

优点:

  1. xml是一种通用的数据格式。
  2. 灵活。
  3. 利用都没可以完全掌控文档。

缺点:

  1. 如果文档来自于服务器,就必须保证文档含有正确的首部信息,若文档类型不正确,nameresponsexml的值将是空的。
  2. 当浏览器接收到较长的xml文件后,dom解析可能会很复杂。

json前台解析:

json后台解析:

1.3.2、HTML

优点

  1. 不必从responseText属性中读取数据,不需要用JavaScript进行解析,它已是希望的格式,可以直接将它插入到页面中。
  2. HTML可读性好。
  3. HTML代码块能与innerHTML完美结合,效率高。

缺点:

  1. 需要从ajax更新一篇文档的多个部分,HTML不合适,只适合整块读取。
  2. innerHTML并非dom标准。

json前台解析:

json后台解析:

1.3.3、json

json是一种简单的数据格式,必xml更轻巧。json是JavaScript原生格式,这意味着,JavaScript中处理json数据不需要任何特殊的api或者工具。

json数组:

json字符串

json详情可参考我的另外一篇博客:https://blog.csdn.net/sinat_37064286/article/details/86554577

优点:

      json和xml很相似,但是它更加灵巧。

      json不需要从服务器发送含有特定内动的首部信息。

缺点:

      语法严谨。

      代码不已阅读。

      eval函数存在风险。

json前台解析:

json后台解析:

 1.4、ajax使用xmlhttprequest对象读取数据

xml:

<script type="text/javascript">

        window.onload=function () {

            //1.获取到a节点,并为其添加onclick响应函数

            document.getElementsByTagName("a")[0].onclick = function () {

                //2.创建一个xmlhttprequest对象

                var request = new XMLHttpRequest();

                //3.准备发送请求的数据url

                var url = this.href;

                var method = "GET";

                //4.调用xmlhttprequest队形的open方法

                request.open(method, url);

                //5.调用xmlhttprequest对象的send方法

                request.send(null);

                //6.为xmlhttprequest对象添加onreadystatechange响应函数

                request.onreadystatechange = function () {

                    //7.判断响应是否完成xmlhttprequest对象的readystate属性


                    if (request.readyState == 4) {

                        //8.再判断响应函数是否 可用

                        if (request.status == 200 || request.status == 304) {

                            //9.打印响应结果,在responseText中

                            alert(request.responseText);
                        }
                    }
                }

                //0.取消a节点的默认行为

                return false;

            }
        }
    </script>
</head>
<body>
    <a href="helloajax.text">HelloAjax</a>
</body>

HTML:

<script type="text/javascript">

        window.onload=function () {

            //1.获取到a节点,并为其添加onclick响应函

            document.getElementsByTagName("a")[0].onclick = function () {

                //2.创建一个xmlhttprequest对象

                var request = new XMLHttpRequest();

                //3.准备发送请求的数据url

                var url = this.href;

                var method = "GET";

                //4.调用xmlhttprequest队形的open方法

                request.open(method, url);

                //5.调用xmlhttprequest对象的send方法

                request.send(null);

                //6.为xmlhttprequest对象添加onreadystatechange响应函数
                request.onreadystatechange = function () {

                    //7.判断响应是否完成xmlhttprequest对象的readystate属性

                    if (request.readyState == 4) {
                        //8.再判断响应函数是否 可用

                        if (request.status == 200 || request.status == 304) {

                            //1.结果为xml格式,需要使用responsexml属性来获取

                            var result=request.responseXML;

                            //2.因为为xml格式,不能直接获取,需要创建对应节点,再把节点加到目标中。

                            var to=result.getElementsByTagName("to")[0].firstChild.nodeValue;

                            var from=result.getElementsByTagName("from")[0].firstChild.nodeValue;

                            var heading=result.getElementsByTagName("heading")[0].firstChild.nodeValue;

                            var body=result.getElementsByTagName("body")[0].firstChild.nodeValue;
                            alert(to);
                            alert(from);

                            alert(heading);
                            alert(body);

                            document.getElementById("mubiao").innerText=to;
                            document.getElementById("mubiao").innerText=heading;

                            //document.getElementById("mubiao").innerHTML=from;
                        }
                    }
                }
                //0.取消a节点的默认行为
                return false;
            }
        }
    </script>
</head>
<body>
<a href="jony.xml">HelloAjax</a>
<div id="mubiao"></div>
</body>

json:

由于jQuery封装了ajax,提供了更为方便简单的.get、.get、.post、.getJSON、.getJSON、.ajax

所以呢下面重点来介绍以上几个方法怎么实现数据交互,以及前后台接受和解析

先简单简绍一下这几个方法的使用,然后在将前后台接受和解析分为四个模块来应对日常使用

2、jQuery中使用ajax      

2.1、函数解释

jQuery.load():使用load方法从服务器加载数据

jQuery.get() :使用 HTTP GET 请求从服务器加载数据

jQuery.post():使用 HTTP POST 请求从服务器加载数据

jQuery.getJSON():使用 HTTP GET 请求从服务器加载 JSON 编码数据

jQuery.ajax():执行异步 HTTP (Ajax) 请求   

0.jQuery.load()

---------读取数据:

<script type="text/javascript">
$(document).ready(function(){
    $("#mybutton").click(function(){
        $("#mydiv").load("haha.txt",function(responseTxt,statusTxt,xhr){
            if(statusTxt=="success"){
                alert("成功");
            }
            if(statusTxt=="error"){
                alert("失败:"+xhr.status+":"+xhr.statusTxt);
            }
        });
    });
})
</script>

下面的例子把 "demo_test.txt" 文件中 id="p1" 的元素的内容, 加载到指定的 <div> 元素中: 实例: $("#div1").load("demo_test.txt #p1");

1.jQuery.get()

$(selector).get(url,data,success(response,status,xhr),dataType)

url 必需。规定将请求发送的哪个 URL。
data 可选。规定连同请求发送到服务器的数据
success(response,status,xhr)

可选。规定当请求成功时运行的函数。

额外的参数:

  • response - 包含来自请求的结果数据
  • status - 包含请求的状态
  • xhr - 包含 XMLHttpRequest 对象
dataType

可选。规定预计的服务器响应的数据类型。

默认地,jQuery 将智能判断。

可能的类型:

  • "xml"
  • "html"
  • "text"
  • "script"
  • "json"
  • "jsonp"

简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。

例子:

$.get(
  "product?type=111",{
  id:  '123',
  name:  '青藤园',
  },function(data,state){
  //这里显示从服务器返回的数据
  alert(data);
  //这里显示返回的状态
  alert(state);
  }
)

该函数是简写的 Ajax 函数,等价于:

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

--------读取数据

$(document).ready(function(){
    $("#mybutton").click(function(){
        $.get("haha.txt",null,function(data,status){   
            alert(data+":"+status);
        });
    });
});
</script>

2.jQuery.post()

post() 方法通过 HTTP POST 请求从服务器载入数据

这个方法和$.get()用法差不多,唯独多了一个type参数,那么这里就只介绍type参数吧,其他的参考上面$.get()的。

type:type为请求的数据类型,可以是html,xml,json等类型,如果我们设置这个参数为:json,那么返回的格式则是json格式的,如果没有设置,就和$.get()返回的格式一样,都是字符串的。

jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)

url 必需。规定把请求发送到哪个 URL。
data 可选。映射或字符串值。规定连同请求发送到服务器的数据
success(data, textStatus, jqXHR) 可选。请求成功时执行的回调函数
dataType

可选。规定预期的服务器响应的数据类型。

默认执行智能判断(xml、json、script 或 html)

默认执行智能判断(xml、json、script 或 html)。

$.post(
  "product?type=111",{
  id:  '123',
  name:  '青藤园',
  },function(data,state){
  //这里显示从服务器返回的数据
  alert(data);
  //这里显示返回的状态
  alert(state);
  },
  "json"
)
<script type="text/javascript">
    $(document).ready(function() {
        $("#mybutton").click(function() {
            $.post("/Json/JsonServlet", {
                name:"我是谁",
                age:12
            }, function(data, status) {
                alert(data + ":" + status);
            });
        });
    });
</script>

该函数是简写的 Ajax 函数,等价于:
 

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

3.jQuery.getJSON()           

 使用 AJAX 请求来获得 JSON 数据,并输出结果
函数没有type参数,返回的是json类型的,不需要转换。

jQuery.getJSON(url,data,success(data,status,xhr))

url 必需。规定将请求发送的哪个 URL。
data 可选。规定连同请求发送到服务器的数据。
success(data,status,xhr)

可选。规定当请求成功时运行的函数。

额外的参数:

  • response - 包含来自请求的结果数据
  • status - 包含请求的状态
  • xhr - 包含 XMLHttpRequest 对象
<script type="text/javascript">
    $(document).ready(function() {
        $("#mybutton").click(function() {
            $.getJSON("JsonServlet", {
                name:"我是谁",
                age:12
            }, function(json) {
                alert(json.name);
                $("#mydiv").html(json.name);
            });
        });
    });
</script>


该函数是简写的 Ajax 函数,等价于:

$.ajax({
  url: url,
  data: data,
  success: callback,
  dataType: json
});

返回的就直接是json格式的对象,无需JSON.parse的方法转换

从 test.js 载入 JSON 数据并显示 JSON 数据中一个 name 字段数据:

$.getJSON("test.js", function(json){
  alert("JSON Data: " + json.users[3].name);
});

相同的最终传递给前台的时候都默认以字符串的形式传递过去, 
注意的是除了getJSON方式 前台可以使用两种方式来将字符串转换成js对象:

1. eval()函数  :不推荐,有隐患 会执行其他js操作
2. JSON.parse()函数 :推荐:只执行对象转换操作

4.jQuery.ajax() 

     
执行异步 HTTP (Ajax) 请求

该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。

最简单的情况下,$.ajax() 可以不带任何参数直接使用。

注意:所有的选项都可以通过 $.ajaxSetup() 函数来全局设置。

jQuery.ajax([settings])

settings    可选。用于配置 Ajax 请求的键值对集合。

可以通过 $.ajaxSetup() 设置任何选项的默认值。

具体该方法的参数可以观看另外一篇博客:https://www.cnblogs.com/tylerdonet/p/3520862.html

通过 AJAX 加载一段文本:

//jQuery 代码:
<script type="text/javascript">
    $(document).ready(function() {
        $("#mybutton").click(function() {
            $.ajax({
                url : "/Json/JsonServlet",
                type : "POST",
                async : true,
                dataType : "json",
                data : {
                    name : "前台数据",
                    age : 12
                },
                success : function(result) {
                    $("#mydiv").html(result.name);
                },
                error : function(xhr) {
                    alert("错误提示: " + xhr.status + " " + xhr.statusText);
                }
            });
        });
    });
</script>

//HTML 代码:
<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button id="b01" type="button">Change Content</button>

最后一种方式是依附于表单:表单的局部刷新 
序列化表单方法: 
serialize():将表单内容序列化成一个字符串。

serializeArray():将表单内容序列化成一个对象数组

这里只介绍:serialize() 
看script:

<script type="text/javascript">
    $(document).ready(function() {
        $("#mybutton").click(function() {
            //var frm=$("#form1").serializeArray();
            var frm = $("#form1");
            $.ajax({
                url : frm.attr("action"),
                type : frm.attr("method"),
                async : true,
                data : frm.serialize(),
                //var data=$("#form1").serializeArray();

                success : function(data) {
                    alert("ok");
                },
                error : function(data) {
                    alert(data.status);
                }
            });
        });
    });
</script>


form表单:

<form id="form1"
        action="${pageContext.request.contextPath}/ClassServlet" method="POST">
        <input type="text" name="name" /> <input type="password"
            name="password" /> <input type="button" id="mybutton" value="点我" />
    </form>

注意:

使用:serialize()

这时表单的按钮的type不可以是submit,否则自提交数据,  
也就是自动刷新; 用Ajax的serialize()提交表单,  
如果input的type为submit,提交时就会自动刷新,  
所以,用serialize()提交表单的时候最好把type改为button.这里呢如果是验证账号是否存在等可以使用submit。。

2.2、区别

  • GET - 从指定的资源请求数据,发送至服务器的key/value数据会作为QueryString附加到请求URL中,服务器返回数据的格式其实是字符串形式,并不是我们想要的json数据格式
  • POST - 向指定的资源提交要处理的数据,这个函数跟.get()参数差不多,多了一个type参数,type为返回的数据类型,可以是html,xml,json等类型,如果我们设置这个参数为:json,那么返回的格式则是json格式的,如果没有设置,就和.get()参数差不多,多了一个type参数,type为返回的数据类型,可以是html,xml,json等类型,如果我们设置这个参数为:json,那么返回的格式则是json格式的,如果没有设置,就和.get()返回的格式一样,都是字符串的
  • getJSON-使用 AJAX 请求来获得 JSON 数据,使用JSON相比传统的通过 GET、POST直接发送“裸体”数据,在结构上更为合理,也更为安全。至于jQuery的getJSON()函数,只是设置了JSON参数的 
  • ajax()函数的一个简化版本。这个函数也是可以跨域使用的,相比get()、post()有一定优势。另外这个函数可以通过把请求url写 成”myurl?callback=X”这种格式,让程序执行回调函数X。
  • ajax()-$.ajax() 返回其创建的 XMLHttpRequest 对象

3、$.ajax()日常案例

//1.$.ajax带json数据的异步请求  
var aj = $.ajax( {    
    url:'productManager_reverseUpdate',// 跳转到 action    
    data:{    
             selRollBack : selRollBack,    
             selOperatorsCode : selOperatorsCode,    
             PROVINCECODE : PROVINCECODE,    
             pass2 : pass2    
    },    
    type:'post',    
    cache:false,    
    dataType:'json',    
    success:function(data) {    
        if(data.msg =="true" ){    
            // view("修改成功!");    
            alert("修改成功!");    
            window.location.reload();    
        }else{    
            view(data.msg);    
        }    
     },    
     error : function() {    
          // view("异常!");    
          alert("异常!");    
     }    
});

//2.$.ajax序列化表格内容为字符串的异步请求  

function noTips(){    

    var formParam = $("#form1").serialize();//序列化表格内容为字符串    

    $.ajax({    

        type:'post',        

        url:'Notice_noTipsNotice',    

        data:formParam,    

        cache:false,    

        dataType:'json',    

        success:function(data){    

        }    

    });    

}    
//3.$.ajax拼接url的异步请求  

var yz=$.ajax({    

     type:'post',    

     url:'validatePwd2_checkPwd2?password2='+password2,    

     data:{},    

     cache:false,    

     dataType:'json',    

     success:function(data){    

          if( data.msg =="false" ) //服务器返回false,就将validatePassword2的值改为pwd2Error,这是异步,需要考虑返回时间    

          {    

               textPassword2.html("<font color='red'>业务密码不正确!</font>");    

               $("#validatePassword2").val("pwd2Error");    

               checkPassword2 = false;    

               return;    

           }    

      },    

      error:function(){}    

});   

//4.$.ajax拼接data的异步请求  

$.ajax({     

    url:'<%=request.getContextPath()%>/kc/kc_checkMerNameUnique.action',     

    type:'post',     

    data:'merName='+values,     

    async : false, //默认为true 异步     

    error:function(){     

       alert('error');     

    },     

    success:function(data){     

       $("#"+divs).html(data);     

    }  

});   

需要注意的是:后台导入的json   jar包为import net.sf.json.JSONObject;      import org.json.JSONArray.*;

4、前台提交数据

前面讲的几乎都是ajax提交数据,包含了$.ajax()表单序列化提交,实时验证用户账号是否存在,以及各种方法提交数据。

还可以使用<a href="xxx.xxx?username='liufukin'">请求服务器</a>

5、前台获取数据

获取到三种数据格式--->解析( json数组,json对象,多个json对象,其他格式数据)--->输出

前台获取数据也就是在ajax   success方法中获取data并执行相关操作,这里先将json格式数据,以后再补充其他格式数据^_^。

json数组:
         JSONArray jsonArray2 = JSONArray.fromObject( list );(其中list为后台要返给前台的数据)

传回来的json数组,前台可以通过以下方法获取数据

data[0].username+" " + data[0].password

也可以通过$.each来遍历json数组

success: function (data ,textStatus, jqXHR)
                {
                    var datas = eval(data);//将msg化为数组
                    var num = 1;
                    $.each(datas, function (num) {
                        //alert(data[num].userName);
                        var id = datas[num].id;//注意要与实体类中的名称相同
                        var Name = datas[num].name;
                        var publicHouse = datas[num].publicHouse;
                        var publicDate = datas[num].publicDate;
                        var author = datas[num].author;
                        var description = datas[num].description;
                        var price = datas[num].price;
                        //alert(id,Name,publicDate,publicHouse,author,description,price);
                        var value = "<tr><td align='center'><input name='checked' type='checkbox'  value=" + id + "/></td>";
                        value += "<td align='center'>" + Name + "</td> <td align='center'>" + Name + "</td> <td align='center'>" + publicHouse + "</td> <td align='center'>" + publicDate + "</td><tr/>";
                        $("#tb").append(value);//写入到id为tb的html部分
                    });
                },


还可以
success:function(data){
      var i=0;
      for(var libiary in data){
      alert(data[i].author+":"+data[i].price);
      i++;
         }
     },

body标签内容:

<table  id="tb" width="80%" border="1" cellspacing="0" cellpadding="0"  align="center" >
    <tr>
        <%--   <th align="center"><input name="checked" type="checkbox" /></th>--%>
        <th align="center">ID</th>
        <th align="center">Name</th>
        <th align="center">Password</th>
        <th align="center">Phone</th>
        <th align="center">Address</th>
    </tr>
</table>
其中标签有一些出入,自己改一下就好了O(∩_∩)O哈哈~

json对象:

后台代码:

JSONObject object = new JSONObject();  //创建Json对象
object.put("username", "张三");         //设置Json对象的属性
object.put("password", "123456");
System.out.println(object.toString());  //调用toString方法将json对象转换成json字符串

//把json数据返回给浏览器:
resp.setContentType("application/json; charset=utf-8");
        PrintWriter out = resp.getWriter();
        JSONArray ja=JSONArray.fromObject(libiaries);
        out.print(ja);
//或者
response.getWriter().write(jsonObject.toString());

前台代码:(单个对象)

success: function(result){
var newData = JSON.stringify(result);    //将json对象转换为字符串
newData = eval("("+newData+")");   /解析json

var annualDays = newData.annualDays;
var entryDate = newData.entryDate;

$("input[name='extendDataFormInfo.value(fd_shengyu_nianjia)']").val(annualDays);
$("input[name='extendDataFormInfo.value(fd_ruzhi_date)']").val(entryDate);

}});

所有现代浏览器都支持 JSON 对象,有两个非常有用的方法来处理 JSON 格式的内容:

  • JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript 对象。
  • JSON.stringify(obj) :接受一个 JavaScript 对象并将其转换为一个 JSON 字符串。
  • var json = eval("("+data+")");接受一个 JSON 字符串并将其转换成一个 JavaScript 对象。

多个json对象:

后台

resp.setContentType("charset=utf-8");
        resp.setCharacterEncoding("utf-8");
        JSONObject object = new JSONObject();  //创建Json对象
        object.put("username", "张三");         //设置Json对象的属性
        object.put("password", "123456");
        object.put("username1","张思");
        object.put("password1","1314");
        System.out.println(object);
        System.out.println(object.toString());  //调用toString方法将json对象转换成json字符串

        //把json数据返回给浏览器:
        resp.getWriter().write(object.toString());

前台获取json字符串,转换成json对象并输出

success:function(data){
    alert("hello");
    var json = eval("("+data+")");
    //var json=JSON.parse(data);
    alert(json);
    for(var js2 in json){

        alert( js2+"="+json[js2]);

    }
},

6、后台获取数据

这里呢可以细分为从前台传来的数据,从资源文件中获取数据。

从前台获取去传来的数据,直接用getParameter("ParamName")或者获取域属性以及xml中初始化参数。。

从资源文件中获取数据呢使用Properties,FileInputStream类,直接看一个案例吧

 //private static final String dbconfig = "./src/main/java/utils/dbconfig.properties";
    private static final String dbconfig = "E:/Tomcat9.0/apache-tomcat-9.0.14/webapps/shopping/WEB-INF/classes/resource/dbconfig.properties";
    private static Properties prop = new Properties();
    static {
        try {
           // InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(dbconfig);
            FileInputStream in=new FileInputStream(dbconfig);
            prop.load(in);
            Class.forName(prop.getProperty("driverClassName"));
        } catch (Exception e) {
            throw new RuntimeException(e);
            }
    }
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"), prop.getProperty("password"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

7、后台发送数据

1、

resp.setContentType("application/json; charset=utf-8");
        PrintWriter out = resp.getWriter();
        JSONArray ja=JSONArray.fromObject(libiaries);
        out.print(ja);

其中libiaries是一个list数据。。

2、

response.setContentType("application/json; charset=utf-8");也可以不实用返回的是字符串
PrintWriter out = cu.getWriterOut(response);
out.print(object.toString());
//或者
response.getWriter().write(jsonObject.toString());

其实这两个方法都是同一个原理,大家做个参考就好了。。。

8、总结

其中感觉还有好多地方没有完全讲清楚,以后有机会更新。。。

参考了:

https://blog.csdn.net/qq_36140085/article/details/81567592

https://blog.csdn.net/huileiforever/article/details/12163385

https://blog.csdn.net/qq_38409944/article/details/81352251

猜你喜欢

转载自blog.csdn.net/sinat_37064286/article/details/86759741