Ajax初探(1):Ajax身份揭露

一、什么是ajax

AJAX: Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。与服务器进行交互,它是不是一门编程语言,而是一种方法、形式(无刷新的艺术)。

Ajax并不是一个新生的语言,它是一系列语言的结合体:HTML/XHTML、CSS、DOM、XML、XSLT、XMLHttp、 JavaScript。可以说Ajax涉及的知识面的确是很广的,在Web开发中为我们提供了很方便的交互式用户体验模式。以往我们浏览网页的原理是由 Client向Server提交页面申请,再由Server将申请通过HTTP传回给Client生成浏览页面

使用ajax工作原理如图:

它只是在服务器和客户端之间充当了一个缓冲器

二、Ajax核心

1、核心技术

大家都知道ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成。

1.使用CSS和XHTML来表示。

2. 使用DOM模型来交互和动态显示

3.使用XMLHttpRequest来和服务器进行异步通信。

4.使用javascript来绑定和调用

在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目前几乎所有的主流浏览器都支持它。

2、创建XMLHttpResponse对象

那么Ajax的核心就是XMLHttpRequest对象。

//创建XMLHttpResquest对象
var xmlhttp;
if(window.XMLHttpRequest){    
             Firefox,Opera 8.0+,Safari 非IE浏览器
    xmlhttp = new XMLHttpRequest();
            alert(xmlhttp);//[object XMLHttpRequest]
}else{
            IE浏览器
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

也可这样创建:

<script language="javascript"> var xmlHttp = null; try { XMLHttpRequest(); } catch (e) { IE浏览器 { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } (e) { xmlHttp=); } } </script>

3、向服务器发送请求

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果

所以我们先从XMLHttpRequest讲起,来看看它的工作原理。

首先,我们先来看看XMLHttpRequest这个对象的属性

XMLHttpRequest属性

onreadystatechange: 每次状态改变所触发事件的事件处理程序。

responseText:从服务器进程返回数据的字符串形式。

responseXML:从服务器进程返回的DOM兼容的文档数据对象。

status:从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)

status Text:伴随状态码的字符串信息

readyState: 对象状态值

    0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法

    1 (初始化) 对象已建立,尚未调用send方法

    2 (发送数据) send方法调用,但是当前的状态及http头未知

    3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误

    4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据

其中readyState表示当前对象状态,分为0~4的类别,0: uninitialized,1: loading,2: loaded,3: interactive,4: complete。

status表示HTTP响应状态,常见状态有200 OK,304 Not Modified,401 Unauthorized,403 Forbidden,404 Not Found,500 Internal Server Error,503 Service Unavailable。

代码中认定readyState==4和status==200为正常状态。

#如页面加载另一个页面内容 function ajaxIt(){ xmlhttp; if(window.XMLHttpRequest){ XMLHttpRequest(); alert(xmlhttp);//[object XMLHttpRequest] }{ xmlhttp = ); } xmlhttp.onreadystatechange=(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("Box").innerHTML=xmlhttp.responseText; } } xmlhttp.open('GET','/test/get_json/',true); xmlhttp.send(); }

如上所示,函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。

对于XmlHttpRequest的两个方法,open和send,其中open方法指定了:

a、向服务器提交数据的类型,即post还是get。

b、请求的URL地址和传递的参数。

c、传输方式,false为同步,true为异步。认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。

4、如何处理

那么使用Django,从以一个页面请求到另一个页面,如下:

"GET方式"、”url后附带信息“,”异步的方式“
xmlhttp.open('GET','/test/get_json/?name=BeginMan&age=22',0); line-height:1.5!important">);
xmlhttp.send();

那么在后台,可以这样处理:

def get_json(request): if request.method == "GET": name = request.GET.get('name','') age = request.GET.get(age',0) lis=[name,age] return render_to_response(djtest/get_json.htmllis':lis})

将url附加信息传递到另一个页面,{{lis}}

结果如下:

Send方法用来发送请求。

  知道了XMLHttpRequest的工作流程,我们可以看出,XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。并且它完全是一种客户端的技术。而XMLHttpRequest正是处理了服务器端和客户端通信的问题所以才会如此的重要。

  现在,我们对ajax的原理大概可以有一个了解了。我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示页面,而是先由javascript来处理,然后再显示页面。至于现在流行的很多ajax控件,比如magicajax等,可以返回DataSet等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...