`

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

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

今天看到了一个好东东,就是通过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 " >

var xmlHttp;

function createXMLHttpRequest()   {
  if (window.ActiveXObject)   {
    xmlHttp =   new ActiveXObject( " Microsoft.XMLHTTP " );
  }
  else   if (window.XMLHttpRequest)   {
    xmlHttp =   new XMLHttpRequest();
  }
}
 
function doJSON()   {
  var car = getCarObject();
 
  // Use the JSON JavaScript library to stringify the Car object
    var carAsJSON = JSON.stringify(car);
  alert( " Car object as JSON:\n "   + carAsJSON);
 
  var url =   " JSONExample?timeStamp= "   +   new Date().getTime();
 
  createXMLHttpRequest();
  xmlHttp.open( " POST " , url, true );
  xmlHttp.onreadystatechange = handleStateChange;
  xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded " );  
  xmlHttp.send(carAsJSON);
}
 
function handleStateChange()   {
  if (xmlHttp.readyState ==   4 )   {
      if (xmlHttp.status ==   200 )   {
        parseResults();
    }
  }
}

function parseResults()   {
  var responseDiv = document.getElementById( " serverResponse " );
  if (responseDiv.hasChildNodes())   {
    responseDiv.removeChild(responseDiv.childNodes[ 0 ]);
  }
 
  var responseText = document.createTextNode(xmlHttp.responseText);
  responseDiv.appendChild(responseText);
}

function getCarObject()   {
  return   new Car( " Dodge " , " Coronet R/T " , 1968 , " yellow " );
}

function Car(make, model, year, color)   {
  this .make = make;
  this .model = model;
  this .year = year;
  this .color = color;
}

</ script >

那个json.js就是我们下下来的包啦!

我们再看看在server端的处理
package ajaxbook.chap3;

import java.io. * ;
import java.net. * ;
import java.text.ParseException;
import javax.servlet. * ;
import javax.servlet.http. * ;
import org.json.JSONObject;

public   class JSONExample extends HttpServlet   {
 
  protected   void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException   {
    String json = readJSONStringFromRequestBody(request);
   
      // Use the JSON-Java binding library to create a JSON object in Java
      JSONObject jsonObject =   null ;
      try   {
        jsonObject =   new JSONObject(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);
  }

    private String readJSONStringFromRequestBody(HttpServletRequest request) {
    StringBuffer json =   new StringBuffer();
    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());
    }
      return json.toString();
  }
}

那个不起眼的org.json.JSONObject就是我们从JSON.ORG上下下来的JAVA包!它上面也有JSONObject的JAVA DOC所以不用担心不知道用啦!

OK到此全部搞定啦!

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

参考资料: foundations-of-ajax
              www.json.org

分享到:
评论

相关推荐

    day22_Ajax&amp;amp;Json.zip

    通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页...

    Ajax基础教程(扫描版)

    第3章 与服务器通信:发送请求和处理响应 37 3.1 处理服务器响应 37 3.1.1 使用innerhtml属性创建动态内容 37 3.1.2 将响应解析为xml 40 3.1.3 使用w3c dom动态编辑页面 45 3.2 发送请求参数 52 3.2.1 请求...

    Ajax详解.rar

    Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,...1.4 与服务器端组件进行通信 175 1.5 从客户机调用服务 178 1.6 服务器端验证的需要 179 1.7 用 JSNI 调用本机 JavaScript 181 1.8 为什么使用 GWT? 183

    KODExplorer 芒果云-资源管理器

    - 超快的速度:全面采用Ajax+Json进行数据通信,毫秒级的响应速度; - 全平台兼容性:Win Linux Mac (Apache、Nginx、IIS) #### 2.使用场景: - 取代FTP,服务端、客户端软件等复杂的安装配置。kod可以一键安装...

    Ajax和跨域问题深入解析

    Ajax的核心就是XMLHttpRequest(XHR)对象.XHR为向服务器发送请求和解析服务器响应提供了流畅的接口.可以使用XHR对象获取新数据,通过DOM将新数据插入到页面.虽然名字中包含XML,但是ajax通信和数据格式无关;这种技术...

    JAVA上百实例源码以及开源项目

    Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非...

    借助script进行Http跨域请求:JSONP实现原理及代码

    通常, 使用基于[removed]的Ajax传输协议时, 服务器响应采用JSON编码的数据格式, 当执行脚本时候, JavaScript解析器能够自动将其解码. 由于它使用JSON数据格式, 因此这种Ajax传输协议也叫做”JSONP”. 所以使用jsonp...

    JavaScript详解(第2版)

     18.3.3 向服务器发送请求   18.3.4 步骤3:监控服务器响应状态   18.3.5 使用回调函数处理响应   18.3.6 浏览器缓存问题   18.4 结合起来   18.4.1 使用Ajax从文件中获取文本   18.4.2 使用...

    JAVA上百实例源码以及开源项目源代码

    Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非...

    java开源包1

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包10

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包11

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包2

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

    10.5 截获和修改服务器响应 218 10.6 使用注入数据破坏AJAX 220 10.7 使用注入XML破坏AJAX 222 10.8 使用注入JSON破坏AJAX 223 10.9 破坏客户端状态 224 10.10 检查跨域访问 226 10.11 通过JSON劫持来读取私有数据 ...

    java开源包3

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包6

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包5

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包4

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包8

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

Global site tag (gtag.js) - Google Analytics