Ajax---通过JSON与服务器通信(发送请求和处理响应)

本文介绍如何使用JSON格式通过AJAX发送数据至服务器,并解析服务器返回的JSON数据。演示了使用JavaScript创建符合JSON规范的对象并将其转换为字符串形式,然后通过POST方法发送到服务器端。服务器端则使用Java解析接收到的JSON字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  好久没有做过关于AJAX的东西了,平时做的也无非就是通过XHP要么用GET(请求部分是追加到URL中的并且浏览器对其长度有会有限制)方法要么通过POST(请求参数内容可以放到请求体中并且无量的限制)方法。传递的无非是些参数值(以名=值的方式出现as : name=jkallen)要么就是DOM对象了。再发到到服务端后做些处理再返回到客户端显示对应结果。<wbr style="LINE-HEIGHT: 1.3em">

</wbr>
今天看到了一个好东东,就是通过<wbr style="LINE-HEIGHT: 1.3em">JSON</wbr><wbr style="LINE-HEIGHT: 1.3em"> (JavaScript Object Notation)向服务器发送数据。它是一种轻量级的数据交换格式,使用了类似于C语言家族的习惯。</wbr><wbr style="LINE-HEIGHT: 1.3em">


JSON具有以下这些形式:<wbr style="LINE-HEIGHT: 1.3em"> </wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">

a :  对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 </wbr><wbr style="LINE-HEIGHT: 1.3em">

b:   数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。 </wbr><wbr style="LINE-HEIGHT: 1.3em">

c:   值(<wbr>value</wbr><wbr>)可以是双引号括起来的字符串(<wbr>string</wbr></wbr><wbr>)、数值(number)、 ture、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。 </wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">

d:   字符串(<wbr>string</wbr><wbr>)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。</wbr><wbr style="LINE-HEIGHT: 1.3em"> </wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">

不多说了,关于JSON其实在</wbr><wbr style="LINE-HEIGHT: 1.3em"> www.json.org<wbr style="LINE-HEIGHT: 1.3em"></wbr></wbr><wbr> 上讲得太好了!上面不但有每个JAVA的源文件,而且每个文件都有与之对应的JAVA DOC!还有不少实例!</wbr><wbr style="LINE-HEIGHT: 1.3em">

我就选了json in java  and  json in javascript 二个链接 ,从这二个地方可以下到JSON的javascript包和Java包。</wbr><wbr style="LINE-HEIGHT: 1.3em">

Javascript 包的应用如下:</wbr><wbr style="LINE-HEIGHT: 1.3em">

<wbr>首先创建一个符合json的对象,并通过XHP发送到sever</wbr><wbr></wbr></wbr><wbr style="LINE-HEIGHT: 1.3em">

</wbr><wbr> None.gif</wbr><wbr> < script type = " text/javascript "  src = " json.js " ></ script >
</wbr><wbr> None.gif</wbr><wbr> < script type = " text/javascript " >
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> None.gif</wbr><wbr> var  xmlHttp;
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr></wbr><wbr> ContractedBlock.gif</wbr><wbr> function  createXMLHttpRequest()  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>     if  (window.ActiveXObject)  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>        xmlHttp  =   new  ActiveXObject( " Microsoft.XMLHTTP " );
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>    }  
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>     else   if  (window.XMLHttpRequest)  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>        xmlHttp  =   new  XMLHttpRequest();
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>    }
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>    
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr></wbr><wbr> ContractedBlock.gif</wbr><wbr> function  doJSON()  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>     var  car  =  getCarObject();
</wbr><wbr> InBlock.gif</wbr><wbr>    
</wbr><wbr> InBlock.gif</wbr><wbr>     // Use the JSON JavaScript library to stringify the Car object
</wbr><wbr> InBlock.gif</wbr><wbr>      var  carAsJSON  =  JSON.stringify(car);
</wbr><wbr> InBlock.gif</wbr><wbr>    alert( " Car object as JSON:\n  "   +  carAsJSON);
</wbr><wbr> InBlock.gif</wbr><wbr>    
</wbr><wbr> InBlock.gif</wbr><wbr>     var  url  =   " JSONExample?timeStamp= "   +   new  Date().getTime();
</wbr><wbr> InBlock.gif</wbr><wbr>    
</wbr><wbr> InBlock.gif</wbr><wbr>    createXMLHttpRequest();
</wbr><wbr> InBlock.gif</wbr><wbr>    xmlHttp.open( " POST " , url,  true );
</wbr><wbr> InBlock.gif</wbr><wbr>    xmlHttp.onreadystatechange  =  handleStateChange;
</wbr><wbr> InBlock.gif</wbr><wbr>    xmlHttp.setRequestHeader( " Content-Type " ,  " application/x-www-form-urlencoded " );    
</wbr><wbr> InBlock.gif</wbr><wbr>    xmlHttp.send(carAsJSON);
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>    
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr></wbr><wbr> ContractedBlock.gif</wbr><wbr> function  handleStateChange()  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>     if (xmlHttp.readyState  ==   4 )  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>         if (xmlHttp.status  ==   200 )  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>            parseResults();
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>        }
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>    }
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr> </wbr><wbr> ContractedBlock.gif</wbr><wbr> function  parseResults()  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>     var  responseDiv  =  document.getElementById( " serverResponse " );
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>     if (responseDiv.hasChildNodes())  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>        responseDiv.removeChild(responseDiv.childNodes[ 0 ]);
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>    }
</wbr><wbr> InBlock.gif</wbr><wbr>    
</wbr><wbr> InBlock.gif</wbr><wbr>     var  responseText  =  document.createTextNode(xmlHttp.responseText);
</wbr><wbr> InBlock.gif</wbr><wbr>    responseDiv.appendChild(responseText);
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr> </wbr><wbr> ContractedBlock.gif</wbr><wbr> function  getCarObject()  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>     return   new  Car( " Dodge " ,  " Coronet R/T " ,  1968 ,  " yellow " );
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr> </wbr><wbr> ContractedBlock.gif</wbr><wbr> function  Car(make, model, year, color)  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>     this .make  =  make;
</wbr><wbr> InBlock.gif</wbr><wbr>     this .model  =  model;
</wbr><wbr> InBlock.gif</wbr><wbr>     this .year  =  year;
</wbr><wbr> InBlock.gif</wbr><wbr>     this .color  =  color;
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> None.gif</wbr><wbr> </ script >
</wbr><wbr> None.gif</wbr><wbr>

那个json.js就是我们下下来的包啦!<wbr style="LINE-HEIGHT: 1.3em"></wbr><wbr style="LINE-HEIGHT: 1.3em">
</wbr><wbr style="LINE-HEIGHT: 1.3em">
</wbr>
我们再看看在<wbr>server端的处理</wbr><wbr></wbr><wbr style="LINE-HEIGHT: 1.3em"> </wbr><wbr style="LINE-HEIGHT: 1.3em">
</wbr>
</wbr><wbr style="LINE-HEIGHT: 1.3em"></wbr><wbr> None.gif</wbr><wbr> package  ajaxbook.chap3;
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> None.gif</wbr><wbr> import  java.io. * ;
</wbr><wbr> None.gif</wbr><wbr> import  java.net. * ;
</wbr><wbr> None.gif</wbr><wbr> import  java.text.ParseException;
</wbr><wbr> None.gif</wbr><wbr> import  javax.servlet. * ;
</wbr><wbr> None.gif</wbr><wbr> import  javax.servlet.http. * ;
</wbr><wbr> None.gif</wbr><wbr> import  org.json.JSONObject;
</wbr><wbr> None.gif</wbr><wbr>
</wbr><wbr> ExpandedBlockStart.gif</wbr><wbr></wbr><wbr> ContractedBlock.gif</wbr><wbr> public   class  JSONExample  extends  HttpServlet  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>    
</wbr><wbr> InBlock.gif</wbr><wbr>     protected   void  doPost(HttpServletRequest request, HttpServletResponse response)
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>     throws  ServletException, IOException  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>        String json  =  readJSONStringFromRequestBody(request);
</wbr><wbr> InBlock.gif</wbr><wbr>        
</wbr><wbr> InBlock.gif</wbr><wbr>         // Use the JSON-Java binding library to create a JSON object in Java
</wbr><wbr> InBlock.gif</wbr><wbr>         JSONObject jsonObject  =   null ;
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>         try   </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>            jsonObject  =   new  JSONObject(json);
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>        }
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr> </wbr><wbr> ContractedSubBlock.gif</wbr><wbr>         catch (ParseException pe)  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>            System.out.println( " ParseException:  "   +  pe.toString());
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>        }
</wbr><wbr> InBlock.gif</wbr><wbr>        
</wbr><wbr> InBlock.gif</wbr><wbr>        String responseText  =   " You have a  "   +  jsonObject.getInt( " year " )  +   "   "
</wbr><wbr> InBlock.gif</wbr><wbr>             +  jsonObject.getString( " make " )  +   "   "   +  jsonObject.getString( " model " )
</wbr><wbr> InBlock.gif</wbr><wbr>             +   "   "   +   "  that is  "   +  jsonObject.getString( " color " )  +   "  in color. " ;
</wbr><wbr> InBlock.gif</wbr><wbr>        
</wbr><wbr> InBlock.gif</wbr><wbr>        response.setContentType( " text/xml " );
</wbr><wbr> InBlock.gif</wbr><wbr>        response.getWriter().print(responseText);
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>    }
</wbr><wbr> InBlock.gif</wbr><wbr>
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr> </wbr><wbr> ContractedSubBlock.gif</wbr><wbr>     private  String readJSONStringFromRequestBody(HttpServletRequest request) </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>        StringBuffer json  =   new  StringBuffer();
</wbr><wbr> InBlock.gif</wbr><wbr>        String line  =   null ;
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>         try   </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>            BufferedReader reader  =  request.getReader();
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr></wbr><wbr> ContractedSubBlock.gif</wbr><wbr>             while ((line  =  reader.readLine())  !=   null )  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>                json.append(line);
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>            }
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>        }
</wbr><wbr> ExpandedSubBlockStart.gif</wbr><wbr> </wbr><wbr> ContractedSubBlock.gif</wbr><wbr>         catch (Exception e)  </wbr><wbr> dot.gif</wbr><wbr> {
</wbr><wbr> InBlock.gif</wbr><wbr>            System.out.println( " Error reading JSON string:  "   +  e.toString());
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>        }
</wbr><wbr> InBlock.gif</wbr><wbr>         return  json.toString();
</wbr><wbr> ExpandedSubBlockEnd.gif</wbr><wbr>    }
</wbr><wbr> ExpandedBlockEnd.gif</wbr><wbr>}
</wbr><wbr> None.gif</wbr><wbr>

那个不起眼的org.json.JSONObject就是我们从JSON.ORG上下下来的JAVA包!它上面也有JSONObject的JAVA DOC所以不用担心不知道用啦!<wbr style="LINE-HEIGHT: 1.3em">

</wbr>
OK到此全部搞定啦!<wbr style="LINE-HEIGHT: 1.3em">

可以看到这样比我们平时通过XHP传递一个DOM对象(通过连接串来创建XML串)要方便些!再说通过连接串来处理也不是生成XML数据结构的健壮技术!</wbr><wbr style="LINE-HEIGHT: 1.3em">

参考资料</wbr><wbr style="LINE-HEIGHT: 1.3em">:</wbr>
</wbr><wbr style="LINE-HEIGHT: 1.3em"> foundations-of-ajax<wbr style="LINE-HEIGHT: 1.3em">
                    </wbr>
</wbr><wbr style="LINE-HEIGHT: 1.3em"> www.json.org<wbr style="LINE-HEIGHT: 1.3em"> </wbr><wbr style="LINE-HEIGHT: 1.3em"></wbr></wbr><wbr> b.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值