json ajax简单例子

来源:互联网 发布:linux系统时钟同步 编辑:程序博客网 时间:2024/04/30 19:37

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式, 易于人阅读和编写,

JSON建构于两种结构:

(1)“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

(2)值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

ajax已成为一种热门的js异步执行的技术,但是在前端页面传递参数时,一般有两种方式,一种是将参数组装成字符串,通过Get或者Post方式发送除去,这种方式适合于参数不多,内容不丰富的情况。另外一种是要传递丰富的参数,一般就要使用连接字符串的方式将它组装成一定格式的xml内容,既不方便阅读,也很麻烦,这时,JSON就体现出它的优势,结合JSON-Java library,在后台服务可以很容易的解析请求的参数值。下面就实现一个从前台页面发送一些json格式的字符串给后台,后台解析后返回一些信息在前台页面展示的功能。

 

1 创建前台页面index.jsp里调用ajax请求,js如下

Js代码  收藏代码
  1. <script type="text/javascript" src="js/json.js"></script>  
  2. <script type="text/javascript">  
  3. //创建xmlhttp对象  
  4. var xmlHttp;  
  5. function  createXMLHttpRequest()  {  
  6.   if  (window.ActiveXObject)  {  
  7.      xmlHttp  =   new  ActiveXObject("Microsoft.XMLHTTP");  
  8.   }    
  9.   else   if  (window.XMLHttpRequest)  {  
  10.      xmlHttp  =   new  XMLHttpRequest();  
  11.   }   
  12. }   
  13. //创建Person类有参构造器  
  14. function Person(name,age,gender,birthday){  
  15.     this.age = age;  
  16.     this.gender = gender;  
  17.     this.name = name;  
  18.     this.birthday = birthday;  
  19. }  
  20. //创建一个Person的对象  
  21. function getPerson(){  
  22.     return new Person("coco",25,true,"1988-08-08");  
  23. }  
  24. //发起ajax请求  
  25. function doJSON(){  
  26.    var  person  =  getPerson();  
  27.      
  28.    //使用json.js库里的stringify()方法将person对象转换成Json字符串   
  29.    var  personAsJSON  =  JSON.stringify(person);  
  30.    alert( " Car object as JSON:\n  "   +  personAsJSON);  
  31.      
  32.    var url = "JSONExample?timeStamp="+new Date().getTime();  
  33.      
  34.    createXMLHttpRequest();  
  35.    xmlHttp.open("POST",url,true );  
  36.    xmlHttp.onreadystatechange  =  handleStateChange;  
  37.    xmlHttp.setRequestHeader("Content-Type" ,"application/x-www-form-urlencoded");      
  38.    xmlHttp.send(personAsJSON);  
  39. }  
  40.   
  41. function  handleStateChange()  {  
  42.     if (xmlHttp.readyState  ==   4 )  {  
  43.         if (xmlHttp.status  ==   200 )  {  
  44.             parseResults();  
  45.         }   
  46.     }   
  47. }  
  48.   
  49. function  parseResults()  {  
  50.     var  responseDiv  =  window.document.getElementById("responseDiv");  
  51.     var content = xmlHttp.responseText  
  52.     responseDiv.value = content;  
  53. }  
  54. </script>  

 在这段js中,构造了一个Person对象,然后调用Json.js库的stringify方法,将person对象组装成Json格式的字符串发送到后台处理的servlet,当收到后台处理后返回的数据时,在页面里进行展示。

 

2 后台处理的Servlet,内容如下:

Java代码  收藏代码
  1. public class JSONExample extends HttpServlet{  
  2.   
  3.     @Override  
  4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  5.             throws ServletException, IOException {  
  6.         // TODO Auto-generated method stub  
  7.         doPost(req,resp);  
  8.     }  
  9.   
  10.     @Override  
  11.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  12.             throws ServletException, IOException {  
  13.         String json  =  readJSONStringFromRequestBody(req);  
  14.           
  15.         // Use the JSON-Java binding library to create a JSON object in Java   
  16.         JSONObject jsonObject  =   null ;  
  17.         String responseText = null;  
  18.         try{  
  19.            //将json字符串转化为JsonObject对象  
  20.            jsonObject  =   new  JSONObject(json);  
  21.            String gender = jsonObject.getBoolean("gender")?"男":"女";  
  22.            responseText  =   "You name is  "   +  jsonObject.getString( "name" )  +   " age is  "   
  23.            +  jsonObject.getInt( "age" )  +   "  gender is "   + gender  
  24.            +  "  birthday is  "   +  jsonObject.getString( "birthday" );  
  25.            System.out.println("responseText="+responseText);  
  26.         }   
  27.          catch (Exception pe)  {  
  28.            System.out.println( " ParseException:  "   +  pe.toString());  
  29.         }   
  30.         //设置字符集,和页面编码统一,否则有可能乱码  
  31.         resp.setCharacterEncoding("utf-8");  
  32.         resp.setContentType( "text/xml" );  
  33.         resp.getWriter().print(responseText);  
  34.     }  
  35.   
  36.     //读取前段post方法传递过来的信息  
  37.     private  String readJSONStringFromRequestBody(HttpServletRequest request) {  
  38.         StringBuffer json  =   new  StringBuffer();  
  39.         String line  =   null ;  
  40.         try   {  
  41.             BufferedReader reader  =  request.getReader();  
  42.             while ((line  =  reader.readLine())  !=   null )  {  
  43.                 json.append(line);  
  44.             }   
  45.         }   
  46.           catch (Exception e)  {  
  47.             System.out.println( "Error reading JSON string:  "   +  e.toString());  
  48.         }   
  49.          return  json.toString();  
  50.     }   
  51. }  

 在这个java类里,主要就是将从前端页面里得到的json字符串转换成JSONObject,然后调用它相应的方法,根据key值得到value值。

 

3 servlet在web.xml里注册

Xml代码  收藏代码
  1. <servlet>    
  2.         <servlet-name>JSONExample</servlet-name>    
  3.         <servlet-class>    
  4.         com.sinye.json.JSONExample</servlet-class>    
  5.     </servlet>  
  6.       
  7.     <servlet-mapping>    
  8.         <servlet-name>JSONExample</servlet-name>    
  9.         <url-pattern>/JSONExample</url-pattern>    
  10.     </servlet-mapping>  

 

这样,就完成了一个结合json的ajax简单例子,更多内容可以去json的官网:http://www.json.org/。另外,在这里面使用的json.js和json.jar都可以从官网招到,如果闲麻烦,可以直接在这里下载

0 0
原创粉丝点击