微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ajax之二 Ajax基础

[学习目标]

F理解并掌握XMLHttpRequest对象的相关属性方法的使用

F理解并掌握如何利用XMLHttpRequest对象读取xml格式文档

本章简介

Ajax是一组技术的集合,Asp.Net AJAX就是建立在这组技术的基础之上的。虽然Asp.Net AJAX尽量隐藏了Ajax的技术细节,但是要想明白Asp.Net AJAX能干什么,或者说要想扩展这个框架以便创建所需要的高级应用程序,那么就必须拥有关于Ajax的一些更加深入的知识。

术语“Ajax”是在2005年初由Jesse James Garrett在他的随笔《A New Approach to WebApplication》中提出的。不过,除了这个术语本身之外,组成它的那些技术都不是什么新事物。虽然XML可以是Ajax应用程序的一部分(不过也不是必需的!),其基础让然是JavaScript(不在此处赘述,请参阅相关JavaScript书籍或文档)。

下面介绍两个Ajax常用的核心对象,通常用来向Web应用程序提供Ajax行为。即XMLHttpRequest对象,主要负责生成异步的HTTP调用

1.1 XMLHttpRequest对象

1.1.1XMLHttpRequest简介

XMLHttpRequest的第一个实现可以追溯到1999年发布的IE5.0,当时IE5.0包含了一个叫做XMLHttpRequest对象的ActiveX对象,其工作内容就像它的名字一样,生成一个HTTP请求并获取一个消息。在后续的时间里,其他浏览器如Mozilla 、Mac的Camino 、Firefox等都提供了对XMLHttpRequest对象的支持

由于市场上的大部分浏览器(市场份额约99%)都支持XMLHttpRequest,因此也就有了Ajax兼容的大环境,所以,也意味着几乎人人都可以体验Ajax应用程序了。但也有例外,就是用户自己禁用了浏览器中的JavaScript。

1.1.2XMLHttpRequest的常用属性方法

常用属性如下表所示:

属性

描述

onreadystatechange

指定当readyState属性改变时的事件处理句柄。只写

readyState

返回当前请求的状态,只读

responseBody

将回应信息正文以unsigned byte数组形式返回。只读

responseText

以字符串的形式返回响应数据

responseXML

以XML文档的格式返回响应数据

status

含有请求所返回的HTTP状态码,只读

statusText

含有与该HTTP状态对应的文字描述,只读

onreadystatechange属性为HTTP响应提供了回调的途径。该属性名称说明了其功能:它指示了一个动作,这个动作在另一个XMLHttpRequest属性(readyState)的值发生改变时被触发。readyState属性用于表示XMLHttpRequest对象的状态,它共有5个可能值。

readyState的值 说明

0 对象未初始化

1 请求正在加载

2 请求已经加载完成

3 请求正在等待用户交互

4 请求已完成


常用方法如下表所示:

方法

描述

abort

取消当前请求

getAllResponseHeaders

获取响应的所有http头

getResponseHeader

从响应信息中获取指定的http头

open

创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)

send

发送请求到http服务器并接收回应

setRequestHeader

单独指定请求的某个http头

1.1.3 对XMLHttpRequest对象编程

实例化XMLHttpRequest对象的方式取决于代码在什么浏览器中执行。对于IE5.0及其后续版本,下面的代码片段是可以工作的。它将尝试两种方法以实例化XMLHttpRequest,因为不同版本的IE有着不同版本的Microsoft XML库。为了避免在其中一种方法失败时出错,这里使用了两个try-catch块:

var XMLHTTP=null;

try{

XMLHTTP=newActiveXObject("Msxml2.XMLHTTP");

}catch(e){

try{

XMLHTTP=newActiveXObject("Microsoft.XMLHTTP");

}catch(e){}

}

对于IE以外的其他浏览器,可以使用一种简洁的语法:

XMLHTTP=new XMLHttpRequest();

因此,我们所需要做的就是先判断正在使用什么类型的浏览器,然后再通过相应的办法来实例化XMLHttpRequest对象即可。例如下面的代码通过测试window对象的ActiveXObject属性来判断是否能够实例化一个AcitveX对象,如果成功,则该浏览器就肯定是IE。

if(window.ActiveXObject)

{

//它可能是IE

}

同样,你可以使用下面的代码片段来判断是否存在XMLHttpRequest对象。

if(XMLHttpRequest){

//它很可能不是IE

}

使用标准的JavaScript来判断浏览器的功能,检查window.XMLHttpRequest(注意,不是XMLHttpRequest)以确定浏览器是否支持本地的XMLHttpRequest对象。如果使用了这个技术的话,该函数的写法就稍微有点不同了,如下所示:

function getXMLHTTP()

{

var XMLHTTP=null;

if(window.ActiveXObject)

{

try{

XMLHTTP=newActiveXObject("Microsoft.XMLHTTP");

}catch(e){}

}else if(window.XMLHttpRequest)

{

try{XMLHTTP=newXMLHTTPRequest();

}catch(e){}

}

return XMLHTTP;

}

网上有关于多种实现判断的方法,请大家在考虑多种浏览器的同时,考虑程序的健壮性。

项目一:建立Ajax和Asp.Net页面结合的案例

1.首先建立一个没有使用AJAX功能的简单页面,客户端代码如程序清单2-1所示:

程序清单2-1 利用XMLHttpRequest对象测试Ajax案例

<%@ PageLanguage="C#" AutoEventWireup="true" CodeFile="ajax.aspx.cs"Inherits="_Default" %>

<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml" >

<headrunat="server">

<title>Ajax和Asp.Net页面结合的案例</title>

<script language="javascript"type="text/javascript">

function getXMLHTTP()

{

var XMLHTTP=null;

if(window.ActiveXObject)

{

try{

XMLHTTP=newActiveXObject("Microsoft.XMLHTTP");

}catch(e){}

}else if(window.XMLHttpRequest)

{

try{XMLHTTP=newXMLHTTPRequest();

}catch(e){}

}

return XMLHTTP;

}

var XMLHTTP=getXMLHTTP();

//创建一个XMLHttpRequest对象,如果成功,向服务器发送一个带有参数sendData=ok(也可以是任意值)的GET请求。接着给onreadystatechange属性设置一个函数,最后将这个请求发送到服务器。

if(XMLHTTP!=null)

{

XMLHTTP.open("GET","ajax.aspx?sendData=ok");

XMLHTTP.onreadystatechange=stateChanged;

XMLHTTP.send(null);

}

function stateChanged()

{

if(XMLHTTP.readyState==4 &&XMLHTTP.status==200)

window.alert(XMLHTTP.responseText);

}

</script>

</head>

<body>

<form id="form1"runat="server">

<div>

<p>Wait and see...</p>

</div>

</form>

</body>

</html>

2.在页面的加载事件代码如下:

protected voidPage_Load(object sender,EventArgs e)

{

if(Request.QueryString["sendData"] != null &&

Request.QueryString["sendData"] == "ok")

{

Response.Write("Hello from theserver!");

Response.End();

}

}

该程序启动之后,会首先出来图2-1,弹出警告框信息,然后才是在页面显示Wait and see…




如果想在HTTP请求上使用POST命令,那就需要设置open()方法的第一个参数。当需要向服务器发送超过500字节的数据(因为这可能超出URL的最大长度)或不想被代理服务器缓存的时候,使用POST是尤为重要的。把要发送的数据以名值对一级经过URL编码(如果需要的话)的形式提供给send()函数,就像下面的代码片段那样:

XMLHTTP.open(“POST”,”ajax.aspx”);

XMLHTTP.onreadystatechange=stateChanged;

XMLHTTP.send(“sendData=ok&returnValue=123”);

通过POST命令发送的数据,在Asp.Net中要使用Request.Form属性来进行读取,而不是针对GET请求的Request.QueryString属性

500个字节只是一个保守数字而已,各种浏览器对URL的长度支持可能是不同的。

项目二:建立使用Xml格式的AJAX的页面程序

1.建立一个Asp.Net程序,可以使用动态页面也可以使用静态页面,此处使用的是静态页面,名字为SimpleAjax.htm,代码如程序清单2-2所示:

程序清单2-2

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>简单Ajax示例</title>

<script type="text/javascript" language="javascript">

varxmlHttp;

functioncreateXmlHttpRequest()

{

//判断是否为IE浏览器

if(window.ActiveXObject)

{

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

}

else if(window.XMLHttpRequest)

{

xmlHttp=new XMLHttpRequest();

}

}

//启动对页面的请求

function startRequest()

{

createXmlHttpRequest();

//当请求状态发生改变会调用该javaScript方法

xmlHttp.onreadystatechange=handleStateChange;

//建立对服务器的调用,此方法有3个参数,

//一个参数说明你请求服务器的方式,第二个参数确定你请求的服务器端的URL,第三个参数说明处理方式是否为异步处理

//这里的异步提交是真正体现了Ajax优势的方式,当设定为False时,主要应用于持久化页面的设定。

//这里设定请求服务器地址

xmlHttp.open('GET',"TestData.xml",true);

//即向服务器发送请求,向服务器端发送某些数据可以是流、Document对象,字符串等对象,如果设定为异步提交,此方法一定会立即返回

//但同步提交时该方法一定需要服务器相应

//传入这个方法内容会作为请求体的一部分发送

xmlHttp.send(null);

}

functionhandleStateChange()

{

// 判断XMLHttpRequest对象读取服务器响应状态 4 说明对服务器响应读取完成

if(xmlHttp.readyState==4)

{

//判断Http状态码 200 说明服务器地址正确、请求正确

if(xmlHttp.status==200)

{

//接收服务器回应的XmlDocument对象

varxmlDoc=xmlHttp.responseXml;

//通过控件ID找到控件testData

vartestData=document.getElementById('testData');

//解析服务器回应的XmlDocument对象 并设定testData的值为服务器回应XML数据

testData.innerHTML="<b>"+xmlDoc.getElementsByTagName('data')[0].firstChild.nodeValue+"</b>";

}

}

}

</script>

</head>

<body>

<input type="button" id='btnAjax' value='触发Ajax事件' onclick='startRequest();'/>

<div id='testData' class="color:#ff0000"></div>

</body>

</html>

2.添加一个xml文件,TestData.xml,内容如下:

<?xmlversion="1.0"encoding="utf-8" ?>

<root>

<data>

测试数据 仅仅为了显示Ajax异步提交及与服务器通信的实例

</data>

</root>

2.

请大家比较项目一和项目二的异同。

@本章总结

1.本章介绍了XMLHttpRequest对象的相关属性方法

2.使用利用不同浏览器结合XMLHttpRequest对象来显示数据。

3.利用不同浏览器、XML和XMLHttpRequest对象读取数据。

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

相关推荐


IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但是在某些特殊情况下,我们可能还需要使用IE6来访问网页。而在IE6中,我们通常会使用JavaScript来提交表单,来看一下具体操作。
PHP中的count()函数是用来计算数组或容器中元素的个数。这个函数十分方便,在编写代码时使用频率也非常高。无论你是要统计数组的长度、统计字符串中字符出现的次数还是统计对象中属性的个数,count()都可以帮助你轻松
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不刷新整个页面的情况下,向服务器发送请求并接收响应。通常来说,我们使用 AJAX 请求是为了获取后台数据,并将其展示在前端页面上。然而,有时候我们只需要
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页用户体验的技术,通过与服务器进行异步通信,实现在网页上局部刷新数据而不必整个页面刷新的功能。在实际开发中,我们经常需要从服务器端下载文件,而传统
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以在不刷新整个页面的情况下,向服务器发送请求并获取响应数据。在某些场景下,我们需要通过AJAX下载Excel文件流,以便于在前端使用或保存到本地。本文将详
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax,我们可以在不刷新整个页面的情况下向服务器发送请求并获得响应数据。而在Ajax的基础上,.get和.post是两种常用的请求方法,它们分别用于发送GET和POST请
AJAX(Asynchronous JavaScript and XML)是一种在网页上实现异步数据传输的技术。通过AJAX,网页可以在不刷新整个页面的情况下与服务器进行数据交互,提升用户体验和页面性能。在实际应用中,AJAX广泛用于表单提交、
在使用Ajax下拉加载数据的过程中,有时候会出现无法取到360度的问题。这个问题可能是由于代码逻辑的问题导致的,也有可能是网络延迟引起的。为了解决这个问题,我们需要对代码进行仔细排查,并且在合适的地方添加适当
本文将介绍Ajax和.post之间的区别。Ajax是一种用于在网页上进行异步通信的技术,能够在不刷新整个页面的情况下更新部分页面内容。.post是jQuery中的一个方法,用于向服务器发送POST请求。虽然它们都可以用于发送异步
AJAX(Asynchronous JavaScript and XML)是一种在Web页面上进行异步数据请求和交互的技术。它的出现使得页面在后台与服务器进行数据交互的同时,不需要重新加载整个页面。在网页开发中,常常需要实现文件上传功能,