初步了解Ajax

以下参考部分菜鸟驿站以及W3school

Ajax是一种让网页的响应更快的技术,因为它允许异步地向服务器发送请求,而不需要重新载入页面,使用Ajax来提升用户体验。

Ajax=Asynchronous JavaScript and XML (异步JavaScript和XML)

Ajax不是新的编程语言,而是一种使用了现有标准的新方法。它最大的优点在于不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。Ajax是不需要任何浏览器插件,但是需要用户允许JavaScript在浏览器上执行。


1.Ajax工作原理

在浏览器中,有一个事件发生了,然后会产生一个XMLHttpRequest 对象,然后发送HttpRequest到服务器,处理HTTPRequest请求,创建一个响应然后把数据传送到浏览器中,浏览器中用JavaScript处理从服务器中返回来的数据,之后就更新部分数据。

XMLHttpRequest对象(异步的与服务器交换数据),JavaScript/DOM(信息显示/交互),CSS(给数据定义样式),XML(作为转换数据的格式),Ajax应用程序与浏览器和平台无关的。

所有的现代浏览器都是支持XMLHttpRequest对象的(IE5 IE6)使用的是ActiveXObject.

XMLHttpRequest是用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


2.创建XMLHttpRequest对象,所有的现代浏览器(IE7+,Firefox,Chrome,Safari以及Opera)内均建XMLRequest对象。

那创建的语法是var=new XMLHttpRequest();

而IE 5 IE6就要这样子创建: var=new ActiveXObject("Microsoft.XMLHTTP");

为了保证可以在所有的浏览器中运行,我们一般都要对他们进行创建,如果不支持的话,那么我们就创建ActiveXObject;

有关的代码是:

var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}


3.向服务器中发送请求

之前提过,XMLHttpRequest对象是用于和服务器交换数据的,如果我们想要将请求发送到服务器,那么我们就可以使用XMLHttpRequest对象的open()和send()方法:

xmlhttp.open("GET","ajax_info.txt",true);

xmlhttp.send();

首先我们来介绍一下open()这个方法,从上面可以看到open()中有三个参数的,分别是method,url,asyc,他们分别规定了请求的类型,URL以及是否异步处理请求。一般来说,请求的类型分为GET或者是POST.URL是指文件中服务器上的位置,async是表示是异步还是同步,如果是异步我们就设置为true,如果是同步的话,就设置为false。这里设置为true就是代表我们通过Ajax就可以在等待服务器响应的时候执行其他的脚本,当响应就绪后对响应进行处理,大大利用了资源,提高了网站的性能。

send(string)的方法,send()中其实有一个参数的,但是只用于post请求,但是这里是GET请求,所以没有使用这个参数.

**那我们什么时候用GET,什么时候使用POST呢?

GET其实会更加地简单,并且在大部分情况下我们都可以使用。然而在以下的情况下,我们使用的是POST请求。

1)无法使用缓存文件(更新服务器上的文件或者数据库)

2)向服务器发送大量的数据(POST没有数量上的限制)

3)发送包含未知的字符的用户输入时,POST更加可靠而且也稳定。而get可以直接在url后面添加要传输的数据。而post是则怎样传送数据的呢?

就要使用setRequestHeader()来添加HTTP头,然后在刚刚说过的send()方法中添加string.例如:

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

xmlhttp.setRequestHeader("Content-type"."application/x-www-form-urlencoded");

xmlhttp.send("frame=Henry&lname=Ford");


关于这个url,是指服务器上文件的地址。该文件可以是任何类型的文件,比如是.txt,和.xml,或者服务器脚本文件,比如.asp和.php。


4.服务器响应

如果我们需要获得来自服务器的响应的话,就使用XMLHttpRequest对象的responseText(这个是获得字符串形式的响应数据,如果我们服务器的响应不是来自于XML的话,我们就应该使用这个属性)或者是responseXML(这个是获得XML形式的响应数据)属性。

document.getElememtById("myDiv").innerHTML=xmlhttp.responseText;


如果我们使用的是responseXML是需要作为XML对象进行解析的。

xmlDoc=xmlhttp.responseXML

txt="";x=xmlDoc.getElementsByTagName("ARTIST");

for(i=0;i<x.length;i++){  

txt=txt + x[i].childNodes[0].nodeValue + "<br>";

}document.getElementById("myDiv").innerHTML=txt;

5.onreadystatechange事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当readyState改变时,就会触发onreadystatechange事件。readyState属性存有XMLHttpRequest的状态信息。

下面是XMLHttpRequest对象的三个重要的属性:

属性                                        描述

onreadystatechange               存储函数(或函数名)。每当readyState属性改变的时候,就会调用该函数。

readtState                                存有XMLHttpRequest的状态。从0到4发生变化。

                                                  0:请求未初始化。

                                                  1:服务器连接已经建立

                                                  2:请求已经接收

                                                  3:请求处理中

                                                  4:请求已经完成,且响应已就绪。

status                                        200:"OK"

                                                  404:未找到该页面

在onreadystatechange事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

当readyState等于4且状态为200时,表示响应已经就绪:

xmlhttp.onreadystatechange=function(){

if(xmlhttp.readyState==4&&xmlhttp.status==200){

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

}

##onreadystatechange事件被触发5次(0-4),对应着readyState的变化。


使用回调函数

回调函数是一种以参数形式传递给另一个函数的函数。如果你的网站中存在多个AJAX任务的话,你应该为创建XMLHttpRequest对象编写一个标准的函数,并为每个AJAX任务调用该函数。该函数调用应该包含URL以及发生onreadystatechange事件执行时的任务(每次调用可能不尽相同)

function myFunction(){

loadXMLDoc(URL,function(){      //加载XML文档中的代码可以存储在一个函数中

if(xmlhttp.readyState==4&&xmlhttp.status==200){

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值