ajax开发框架和XMLhttpRequest、responseText、responseXml和JSON的应用

1AJAX开发框架

2A初始化XMLHttpRequest对象

3B指定响应处理函数

4C发出HTTP请求

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

6数据格式提要

6优点

6缺点

7解析JSON

AJAX开发框架

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

对象初始化

发送请求

服务器接收

服务器返回

客户端接收

修改客户端页面内容。

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

A初始化XMLHttpRequest对象

functioncreateXmlHttpRequest(){

varxmlHttp;

try{//Firefox,Opera8.0+,Safari

xmlHttp=newXMLHttpRequest();

}catch(e){

try{//InternetExplorer

xmlHttp=newActiveXObject("Msxml2.XMLHTTP");

try{

xmlHttp=newActiveXObject("Microsoft.XMLHTTP");

}catch(e){}

}

returnxmlHttp;

B、指定响应处理函数

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

XMLHttpReq.onreadystatechange=processResponse;

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

XMLHttpReq.onreadystatechange=function(){};

//处理返回信息的函数

functionprocessResponse(){

C、发出HTTP请求

向服务器发出请求了。这一步调用opensend方法。

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

http_request.send(null)

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

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

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

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

name=value&anothername=othervalue&so=on

代码

functionsendRequest(){

获取文本框的值

varchatMsg=input.value;

varurl="chatServlet.do?charMsg="+chatMsg;

建立对服务器的调用

XMLHttpReq.open("POST",url,255)">设置MiME类别,如果用POST请求向服务器发送数据,

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

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

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

状态改变的事件触发器客户端的状态改变会触发readystatechange事件//onreadystatechange会调用相应的事件处理函数

发送数据

XMLHttpReq.send(null);

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

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

if(http_request.readyState==4){

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

}else{

信息还没有返回,等待

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

if(http_request.status==200){

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

页面有问题

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

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

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

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

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

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

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

数据格式提要

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

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

XML

JSON

HTML

优点:

是一种通用的数据格式。

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

利用可以完全掌控文档。

缺点:

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

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

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

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

规则如下:

1)映射用冒号()表示。名称

2)并列的数据之间用逗号()分隔。名称1:1,255)">2:2

)映射的集合(对象)用大括号(“{}”)表示。{2}

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

[

2},255)">]

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

示例

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

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

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

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

代码实例:

JS处理例子一<scriptlanguage="JavaScript">

varpeople={"firstName":"Brett","lastName":"McLaughlin",255)">"email":"brett@newInstance.com"};

alert(people.firstName);

alert(people.lastName);

alert(people.email);

</script>

例子二varpeople=[

{"firstName":"Brett","email":"brett@newInstance.com"},255)">{"firstName":"Mary","email":"mary@newInstance.com"}

];

alert(people[0].firstName);

alert(people[0].email);

alert(people[1].firstName);

alert(people[1].email);

例子三varpeople={

"programmers":

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

};

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

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

例子四"programmers":[

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

],255)">"authors":[

{"firstName":"Isaac","genre":"sciencefiction"},255)">{"firstName":"Tad","genre":"fantasy"},255)">{"firstName":"Frank","genre":"christianfiction"}

"musicians":[

{"firstName":"Eric","instrument":"guitar"},255)">{"firstName":"Sergei","instrument":"piano"}

]};

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

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

例子五

"username":"mary",255)">"age":"20",255)">"info":{"tel":"1234566","celltelphone":788666},255)">"address":[

{"city":"beijing","code":"1000022"},255)">{"city":"shanghai","code":"2210444"}

window.alert(people.username);

window.alert(people.info.tel);

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

小结

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

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

语法过于严谨

代码不易读

函数存在风险

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

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

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

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

的可读性好。

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

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

并非标准。

对比小结

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


$.AJAX()方法中的PROCESSDATA参数 在使用jQuery的$.ajax()方法的时候参数processData默认为true(该方法为jQuery独有的) 默认情况下会将发送的数据序列化以适应默认的内容类型application/x-www-form-urlencoded 如果想发送不
form表单提交的几种方式 表单提交方式一:直接利用form表单提交 html页面代码: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot; /&gt; &lt;title&gt;Ins
文章浏览阅读1.3k次。AJAX的无刷新机制使得在注册系统中对于注册名称的检测能即时显示。常见的用户注册是用户输入用户名,后台程序检测数据库中用户名是否重复而做出注册的成功与失败之提示(当用户注册重名时将返回重新注册),或者稍微人性化一点就是在用户名文本框后添加一个检测按钮,让用户检测后再做注册。以上操作,对于用户体验方面来说是比较“差劲”的,一个很好的用户体验就是:当用户输入完注册用户名后,Web系统应能即时检查并即时_用户注册 实时异步检测
文章浏览阅读1.2k次。 本文将解释如何使用AJAX和JSON分析器在客户端和服务器之间创建复杂的JSON数据传输层。一、 引言毫无疑问,AJAX已经成为当今Web开发中一种强有力的用户交互技术,但是它的许多可能性应用仍然鲜为人知。在本文中,我们将来共同探讨如何 使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将_ajax技术可行性
文章浏览阅读2.2k次。/************************** 创建XMLHttpRequest对象 **************************/function CreateRequest(){ var xmlObj = null; try { xmlObj = new XMLHttpRequest(); } catch(e) {
文章浏览阅读3.7k次。在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖 掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有 空闲的对象,则使用此对象,否则将创建一个新的对象。下面是我最近写的一个简单的类:* XMLHttpReques_xmlhttprequest发送多个请求
文章浏览阅读3.1k次。Ajax 同一页面如何同时执行多个 XMLHTTP 呢,比如博客页,需要同时利用 Ajax 读取作者信息、文章信息、评论信息……我们的第一反应可能是创建多个全局 XMLHTTP 对象,但这并不现实。其实实现方式非常简单,就是给 onreadystatechange 对应的回调函数加上参数,以下代码是解决方案中一个函数中的一段代码。xmlhttp.open("GET", "ajax_proc_ajax响应多个mxl文件
文章浏览阅读1.5k次。数据岛指的是存在Html网页中的xml代码段,它在Html中形成了一个数据的集合,数据岛允许我们在Html网页中集成xml,对xml编写脚本.数据岛有它特有的形式,由标记xml开始,在开始标记中要有一个ID属性,用于指定该指定数据岛的名称。 (当然要以/xml结束).元素xml包含的内容就是xml代码。数据岛也分为2种:1)内嵌的数据岛形式2)外嵌的数据岛形式说了那么多废话,还_数据中岛计算模式
文章浏览阅读2.1k次。AJAX 流行之后,总想好好学习一下。但是众多的框架实在难以选择。说明一下 ASP.NET AJAX 并不包括在 AJAX 框架之中。刚开始学了 JQuqery, 众多的 $get(),...等等符号早已把我搞晕了。暂时就放弃了。后来学习 ASP.NET AJAX ,在微软的领导下,逐渐由服务器端转向客户端编程。 激起我客户端编程的兴趣,才想起学习一下了 Jquery. 随着WEB2._jquery ajax asp.net 认证
文章浏览阅读1.7k次。前段时间在用google map api的函数库的时候,发现里面的downloadUrl函数非常好用,所以自己写了一个。用腻了那些什么框架什么池,到头来发现越简单的东西越是适合我这种懒人。downloadUrl(url, callback, data);参数说明: url不用说了; callback是回调函数,函数调用的时候会有两个参数:data, responseCode,data就_xmlhttprequest downloadurl
文章浏览阅读956次。前些时间写了几篇关于XMLHTTP运用的实例.(可以到http://dev.csdn.net/user/wanghr100看之前的几编关于XMLHTTP的介绍.)近来看论坛上经常有人提问关于如何无刷新,自动更新数据.传统上,我们浏览网页,如果加入最新的数据.只能是等我们重新向服务器端请求时才能显示出来.但是,对于一些时效性很强的网站.传统的这种做法是不能满足的.我们可以让程序自动刷新.定时_后端xml怎么实现数据有救新增,没有就更新
文章浏览阅读3.3k次。 XMLHttpRequest调用XMLHttpRequest Call ●●●调用,回调,下载,抓取,实时,查询,远程通信(Remoting),远程通信脚本(RemoteScripting),同步,上传,XMLHttpRequest图6-2:XMLHttpRequest调用 目标故事Reta正在一个批发商网站上购买商品。每次她添加一个商品到购物车时,web站点发出_createxmlhttpre
文章浏览阅读1.3k次。function clearitem(){ var drp1 = document.getElementById("drp1"); while(drp1.options.length>0) { drp1.options.remove(0); } }//动态更改方法(根据城市代码取得该市商业区并添加到DropDownList中_dropdownlist根據動態變化
文章浏览阅读1.9k次。因為 Json.net 是有附原始碼的,他也附了單元測試的專案,底下是我額外增加的UnitTest,我的目標就是讓底下的測試可以pass,而且原來的Test 也要都能通過。 ValueTypeTest.csusing System;using NUnit.Framework;namespace Newtonsoft.Json.Test { [TestFixture] public cl_vb 無效的 json 基本型別
文章浏览阅读844次。利用XMLHTTP无刷新获取数据. 客户端和服务器端数据的交互有几种方法.1.提交,通过提交到服务器端.也称"有刷新"吧.2.通过XMLHTTP无刷新提交到服务器端,并返回数据.也称"无刷新"吧.利用XMLHTTP我们可以实现很多很强大的应用.这文章主要介绍它的一些简单的应用.附:因为XMLHTTP是IE5.0+支持的对象.所以你必须要有IE5.0+才能看到效果.client.htm_xmlhttp取源码没有更新
文章浏览阅读1.8k次。Json.Net 無法序列基本型別(string, int),Asp.Net Ajax 無法正確序列日期,AjaxPro序列出我不想要的_type字串 1. Json.Net 是我最常使用的序列/反序列json套件,標榜速度快,對於一對多關係的object 也都能正常運作, 己能滿足我平日的需要,但前幾天突然有個情況,我要序列的是一個泛型參數,該參數不一定是物object型別,有可能是st_token string in state start
文章浏览阅读1.3k次。转载自:http://www.cnblogs.com/JeffreyZhao/archive/2007/01/31/update_the_updatepanels_by_js.html众 所周知,UpdatePanel是通过Trigger来更新的。被设定为Trigger的控件在PostBack之后会被客户端所截获,并且使用 XMLHttpRequest对象发送内容,然后服务器端由ScriptMan_web.ui.updatepanel 和 updatepanel 的区别
文章浏览阅读1.9k次。有些时候,只是需要更新页面的一个部分甚至只是更新中间的几个数据却需要从服务器DOWN整个页面,导致各种资源的浪费。使用数据岛技术可以很好的解决这个问题:通过定时器或用户事件触发数据岛(XML对象)象服务器获取数据,在数据获取完成后,适时更新相关数据。示例HTML部分:http://localhost/WebService/LoadData/FeaturedService.asmx/GetScore_web数据岛
文章浏览阅读1k次。在页面上使用ActiveXObject的代价是很大的,如果我们的无刷新页面使用xmlhttp技术,我们或许需要频繁的建立xmlhttp对象,当然 我们也可以使用全局变量来cache一个xmlhttp对象实例。但是这样的方法适合于同步方式xmlhttp通信,而对于异步方式xmlhttp通信将 会出现问题。由于没有了进程的堵塞,用户可能再次调用同一个xmlhttp实例,如果这时前一个通信未完成,那么就
文章浏览阅读998次。 by Lokesh Dhakar 译: croc查看原文概要:Lightbox JS 是一个简单而又谦恭的用来把图片覆盖在当前页面上的脚本. 它能被快速安装并且运作于所有流行的浏览器.最新更新 Version 2.0 图片集: 分组相关的图片并且能轻松的导航它们 视觉特效: 奇特的自适应调整 向后兼容: yes! 点击这里查看实例_on lightbox 2 by lokesh dhakar