AJAX开发框架

A 初始化XMLHttpRequest对象

B指定响应处理函数

C发出HTTP请求

D处理服务器返回的信息

数据格式提要

优点

缺点

解析 JSON

AJAX开发框架

AJAX实质上也是遵循Request/Server模式,所以这个框架基本的流程是:

对象初始化

发送请求

服务器接收

服务器返回

客户端接收

修改客户端页面内容。

只不过这个过程是异步的。

A 初始化XMLHttpRequest对象

function createXmlHttpRequest(){

var xmlHttp;

try{ //Firefox, Opera 8.0+, Safari

xmlHttp=new XMLHttpRequest();

}catch (e){

try{ //Internet Explorer

xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

}catch (e){

try{

xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

}catch (e){}

}

}

return xmlHttp;

B、指定响应处理函数

指定当服务器返回信息时客户端的处理方式。只要将相应的处理函数名称赋给XMLHttpRequest对象的onreadystatechange属性就可以了.比如:

XMLHttpReq.onreadystatechange = processResponse;

注意:这个函数名称不加括号,不指定参数。也可以用Javascript函数直接量方式定义响应函数。比如:

XMLHttpReq.onreadystatechange = function() { };

//处理返回信息的函数

function processResponse() {

}

C、发出HTTP请求

向服务器发出HTTP请求了。这一步调用XMLHttpRequest对象的open和send方法。

http_request.open('GET', 'http://www.example.org/some.file', true);

http_request.send(null)

按照顺序,open调用完毕之后要调用send方法。send的参数如果是以Post方式发出的话,可以是任何想传给服务器的内容。

注意:如果要传文件或者Post内容给服务器,必须先调用setRequestHeader方法,修改MIME类别。如下:

http_request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);

这时资料则以查询字符串的形式列出,作为send的参数,例如:

name=value&anothername=othervalue&so=on

代码

//发送请求

function sendRequest(){

//获取文本框的值

var chatMsg=input.value;

var url="chatServlet.do?charMsg="+chatMsg;

//建立对服务器的调用

XMLHttpReq.open("POST",url,true);

//设置MiME类别,如果用POST 请求向服务器发送数据,

//需要将"Content-type"的首部设置为"application/x-www-form-urlencoded".

//它会告知服务器正在发送数据,并且数据已经符合URL编码了。

XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//状态改变的事件触发器,客户端的状态改变会触发readystatechange事件,

//onreadystatechange会调用相应的事件处理函数

XMLHttpReq.onreadystatechange=processResponse;

//发送数据

XMLHttpReq.send(null);

}

//发送请求

function sendRequest(){

//获取文本框的值

var chatMsg=input.value;

var url="chatServlet.do?charMsg="+chatMsg;

//建立对服务器的调用

XMLHttpReq.open("POST",url,true);

//设置MiME类别,如果用POST 请求向服务器发送数据,

//需要将"Content-type"的首部设置为"application/x-www-form-urlencoded".

//它会告知服务器正在发送数据,并且数据已经符合URL编码了。

XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//状态改变的事件触发器,客户端的状态改变会触发readystatechange事件,

//onreadystatechange会调用相应的事件处理函数

XMLHttpReq.onreadystatechange=processResponse;

//发送数据

XMLHttpReq.send(null);

}

处理响应处理函数都应该做什么。

  首先,它要检查XMLHttpRequest对象的readyState值,判断请求目前的状态。参照前文的属性表可以知道,readyState值为4的时候,代表服务器已经传回所有的信息,可以开始处理信息并更新页面内容了。如下:

if (http_request.readyState == 4) {

// 信息已经返回,可以开始处理

} else {

// 信息还没有返回,等待

}

  服务器返回信息后,还需要判断返回的HTTP状态码,确定返回的页面没有错误。所有的状态码都可以在W3C的官方网站上查到。其中,200代表页面正常。

if (http_request.status == 200) {

// 页面正常,可以开始处理信息

} else {

// 页面有问题

}

D、处理服务器返回的信息

XMLHttpRequest对成功返回的信息有两种处理方式:

responseText:将传回的信息当字符串使用;

responseXML:将传回的信息当XML文档使用,可以用DOM处理。

代码

//处理返回信息的函数

function processResponse(){

if(XMLHttpReq.readyState==4){ //判断对象状态4代表完成

if(XMLHttpReq.status==200){ //信息已经成功返回,开始处理信息

document.getElementById("chatArea").value=XMLHttpReq.responseText;

}

}

}

数据格式提要

在服务器端AJAX是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。

从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言只能以如下3种格式返回数据:

XML

JSON

HTML

XML

优点:

XML是一种通用的数据格式。

不必把数据强加到已定义好的格式中,而是要为数据自定义合适的标记。

利用DOM可以完全掌控文档。

缺点:

如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么responseXML的值将是空的。

当浏览器接收到长的XML文件后,DOM解析可能会很复杂

JSON

JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。

JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

规则如下:

1)映射用冒号(“:”)表示。名称:值

2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2

3)映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}

4)并列数据的集合(数组)用方括号(“[]”)表示。

[

{名称1:值,名称2:值2},

{名称1:值,名称2:值2}

]

5 元素值可具有的类型:string, number, object, array, true, false, null

JSON示例

解析 JSON

JSON用冒号(而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。

对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函数,那就是对象的方法。

JSON只是一种文本字符串。它被存储在responseText属性中

为了读取存储在responseText属性中的JSON数据,需要根据JavaScript 的eval语句。函数eval会把一个字符串当作它的参数。然后这个字符串会被当作JavaScript代码来执行。因为JSON的字符串就是由JavaScript代码构成的,所以它本身是可执行的

代码实例:

JS处理JSON

例子一:

<script language="JavaScript">

var people ={"firstName": "Brett", "lastName":"McLaughlin",

"email": "brett@newInstance.com" };

alert(people.firstName);

alert(people.lastName);

alert(people.email);

</script>

例子二:

<script language="JavaScript">

var people =[

{"firstName": "Brett","email": "brett@newInstance.com" },

{"firstName": "Mary","email": "mary@newInstance.com" }

];

alert(people[0].firstName);

alert(people[0].email);

alert(people[1].firstName);

alert(people[1].email);

</script>

例子三:

<script language="JavaScript">

var people ={

"programmers":

[

{"firstName": "Brett", "email": "brett@newInstance.com" },

{"firstName": "Jason", "email": "jason@servlets.com" }

]

};

window.alert(people.programmers[0].firstName);

window.alert(people.programmers[1].email);

</script>

例子四:

<script language="JavaScript">

var people ={

"programmers": [

{ "firstName": "Brett", "email": "brett@newInstance.com" },

{ "firstName": "Jason", "email": "jason@servlets.com" },

{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }

],

"authors": [

{ "firstName": "Isaac", "genre": "science fiction" },

{ "firstName": "Tad", "genre": "fantasy" },

{ "firstName": "Frank", "genre": "christian fiction" }

],

"musicians": [

{ "firstName": "Eric", "instrument": "guitar" },

{ "firstName": "Sergei", "instrument": "piano" }

]};

window.alert(people.programmers[1].firstName);

window.alert(people.musicians[1].instrument);

</script>

例子五

<script language="JavaScript">

var people ={

"username":"mary",

"age":"20",

"info":{"tel":"1234566","celltelphone":788666},

"address":[

{"city":"beijing","code":"1000022"},

{"city":"shanghai","code":"2210444"}

]

};

window.alert(people.username);

window.alert(people.info.tel);

window.alert(people.address[0].city);

</script>

JSON小结

优点:

作为一种数据传输格式,JSON与XML很相似,但是它更加灵巧。

JSON不需要从服务器端发送含有特定内容类型的首部信息。

缺点:

语法过于严谨

代码不易读

eval函数存在风险

解析HTML

HTML由一些普通文本组成。如果服务器通过XMLHttpRequest发送HTML,文本将存储在responseText属性中。

不必从responseText属性中读取数据。它已经是希望的格式,可以直接将它插入到页面中。

插入HTML代码最简单的方法是更新这个元素的innerHTML属性。

HTML小结

优点:

从服务器端发送的HTML代码在浏览器端不需要用JavaScript进行解析。

HTML的可读性好。

HTML代码块与innerHTML属性搭配,效率高。

缺点:

若需要通过AJAX更新一篇文档的多个部分,HTML不合适

innerHTML并非DOM标准。

对比小结

若应用程序不需要与其他应用程序共享数据的时候,使用HTML片段来返回数据时最简单的

如果数据需要重用, JSON文件是个不错的选择,其在性能和文件大小方面有优势

当远程应用程序未知时, XML文档是首选,因为XML是web服务领域的“世界语”

http://blog.csdn.net/chuyuqing/article/details/8687614

ajax开发框架和XMLhttpRequest、responseText、responseXml和JSON的应用的更多相关文章

  1. $.ajax通用格式&&XMLHttpRequest对象属性和方法

    $.ajax({ url: "", type: "POST", async: false, cache:false, //默认true data: {}, da ...

  2. ajax 如何接受 PHP页面返回的json数组

    JSON JSON(JavaScript Object Notation)是Douglas Crockford提出的.他是一个轻量级的数据交换格式,基于JavaScript对象字面量. 我们可以将之前 ...

  3. 原生js 以ajax(post)的方式传json至php,并让php解析为数组

    如题. 比如要把一个json,如 json= {name:"John Rambo", time:"3pm"},,通过js ,传到一个php服务器 fwq.php ...

  4. AJAX中的dataType(数据格式)-text、json

    因为经常使用数据格式,所以将它封装成类,J这样就不会用到时就写了,直接调用写好的类就可以了 (1)dataType数据格式为:TEXT格式的数据是字符串的数据,在"ajax对数据进行删除和查 ...

  5. Jquery发送ajax请求以及datatype参数为text/JSON方式

    Jquery发送ajax请求以及datatype参数为text/JSON方式 1.方式一:datatype:'text' 2.方式二:datatype:'JSON' 3.使用gson-1.5.jar包 ...

  6. Ajax技术---核心XMLHttpRequest对象

    Ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. (一)ajax技术的意义 我 ...

  7. js 发送ajax请求(XMLHttpRequest)

    <!DOCTYPE html><html> <head> <title></title> <script type="tex ...

  8. AJAX优势、跨域方案及JSON数据格式和浏览器中JSON对象

    ajax 不重新加载整个网页的情况下,更新部分网页的技术 注意:ajax只有在服务器上运行才能生效,我在本地一般用phpstudy 优点: 1.优化用户体验 2.承担了一部分本该服务器端的工作,减轻了 ...

  9. Ajax中的XMLHttpRequest对象详解

    XMLHttpRequest对象是Ajax技术的核心.在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引入,被称之为XMLHTTP,它是一种支持异步请求 ...

随机推荐

  1. spark connect to Cassandra problem

    Cassandra rowkey is Blob type, cannot select by spark. How?

  2. Tilera 服务器上hadoop单机版测试

    ---恢复内容开始--- 本篇博客用来记录在单个Tilera服务器上安装hadoop并且测试的经历,参阅了大多数博客. 1.Tilera服务器介绍 本Tilera服务器配备9核CPU,共挂在6块硬盘, ...

  3. IE浏览器 json异常

    当使用json数据结构时,如果对象数组最后一个元素后面依然跟一个“,”,在非IE浏览器下运行正常,但是,在IE浏览器上,则会报错. 如果使用for循环遍历对象数组时,由于后面多了一个分割符" ...

  4. oracle max()函数和min()函数

    当需要了解一列中的最大值时,可以使用MAX()函数:同样,当需要了解一列中的最小值时,可以使用MIN()函数.语法如下. SELECT          MAX (column_name) / MIN ...

  5. hdu 2199 Can you solve this equation?(高精度二分)

    http://acm.hdu.edu.cn/howproblem.php?pid=2199 Can you solve this equation? Time Limit: 2000/1000 MS ...

  6. 关于select @@IDENTITY的初识

    这句话主要是得到唯一的主键,然后应用于下面的SQL语句 例如代码 StringBuilder strSql=new StringBuilder(); strSql.Append("inser ...

  7. CCF 201403-2 窗口 (STL模拟)

    问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的 ...

  8. PowerDesigner 12.5 反向工程sql server

    一.设置数据源 1.控制面板 >> 数据源(ODBC)

  9. PetaPoco 笔记

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项--单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...

  10. 关键词权重计算算法:TF-IDF

    TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或 ...