Ajax---通过JSON与服务器通信(发送请求和处理响应)
通过JSON(JavaScript Object Notation)向服务器发送数据。它是一种轻量级的数据交换格式,使用了类似于C语言家族的习惯。JSON具有以下这些形式:
a : 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
b: 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
c: 值(value)可以是双引号括起来的字符串(string)、数值(number)、 ture、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
d: 字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
不多说了,关于JSON其实在 www.json.org 上讲得太好了!上面不但有每个JAVA的源文件,而且每个文件都有与之对应的JAVA DOC!还有不少实例!
我就选了json in java and json in javascript 二个链接 ,从这二个地方可以下到JSON的javascript包和Java包。
Javascript 包的应用如下:
首先创建一个符合json的对象,并通过XHP发送到sever
< script type = " text/javascript "src = " json.js " ></ script > < script type = " text/javascript " >varxmlHttp;functioncreateXMLHttpRequest() { if(window.ActiveXObject) { xmlHttp= newActiveXObject( " Microsoft.XMLHTTP " ); } else if(window.XMLHttpRequest) { xmlHttp= newXMLHttpRequest(); } } functiondoJSON() { varcar=getCarObject(); // Use the JSON JavaScript library to stringify the Car object varcarAsJSON=JSON.stringify(car); alert( " Car object as JSON:\n" +carAsJSON); varurl= " JSONExample?timeStamp= " + newDate().getTime(); createXMLHttpRequest(); xmlHttp.open( " POST " , url,true ); xmlHttp.onreadystatechange=handleStateChange; xmlHttp.setRequestHeader( " Content-Type " ," application/x-www-form-urlencoded " ); xmlHttp.send(carAsJSON);} functionhandleStateChange() { if (xmlHttp.readyState== 4 ) { if (xmlHttp.status== 200 ) { parseResults(); } } }functionparseResults() { varresponseDiv=document.getElementById( " serverResponse " ); if (responseDiv.hasChildNodes()) { responseDiv.removeChild(responseDiv.childNodes[ 0 ]); } varresponseText=document.createTextNode(xmlHttp.responseText); responseDiv.appendChild(responseText);}functiongetCarObject() { return newCar( " Dodge " ," Coronet R/T " ,1968 ," yellow " );}functionCar(make, model, year, color) { this .make=make; this .model=model; this .year=year; this .color=color;}</ script > 那个json.js就是我们下下来的包啦!
我们再看看在server端的处理
packageajaxbook.chap3; importjava.io. * ; importjava.net. * ; importjava.text.ParseException; importjavax.servlet. * ; importjavax.servlet.http. * ; importorg.json.JSONObject; public classJSONExampleextendsHttpServlet { protected voiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { String json=readJSONStringFromRequestBody(request); // Use the JSON-Java binding library to create a JSON object in Java JSONObject jsonObject= null ; try { jsonObject= newJSONObject(json); } catch (ParseException pe) { System.out.println( " ParseException:" +pe.toString()); } String responseText= " You have a" +jsonObject.getInt( " year " )+ " " +jsonObject.getString( " make " )+ " " +jsonObject.getString( " model " ) + " " + "that is" +jsonObject.getString( " color " )+ "in color. " ; response.setContentType( " text/xml " ); response.getWriter().print(responseText); } privateString readJSONStringFromRequestBody(HttpServletRequest request){ StringBuffer json= newStringBuffer(); String line= null ; try { BufferedReader reader=request.getReader(); while ((line=reader.readLine())!= null ) { json.append(line); } } catch (Exception e) { System.out.println( " Error reading JSON string:" +e.toString()); } returnjson.toString(); } }
org.json.JSONObject是从JSON.ORG上下下来的JAVA包!它上面也有JSONObject的JAVA DOC.
页:
[1]