Ajax学习笔记(一)

Ajax是指异步的Javascript和Xml,不是一种新的编程语言,而是一中javascript方法。

Ajax实现的是B/S架构下的异步交互。

(*异步交互:客户端向服务器端发送请求,直到服务器端进行相应,这个过程中用户可以进行其他操作。

  *同步交互:与异步相反,用户在此过程中不能进行其他任何操作。)

功能:Ajax基于现有Internet标准联合使用,用于快速创建动态网页。

优点:可以不重新加载整个页面与服务器交换数据,并只更新部分网页内容。

          不需要任何浏览器插件,但需要用户允许Javascript在浏览器上执行。

Ajax的应用:(1)运用XHTML+CSS表达资讯;

                    (2)运用Javascript操作DOM以执行动态效果;

                    (3)运用XML和XSLT操作资料;

                    (4)运用XMLHttpRequest或新的Fetch API与网页服务器进行异步交换。

*Ajax与现有Internet标准的联合使用:

                    (1)XMLHttpRequest对象:异步地与服务器交换数据;

                    (2)Javascript/DOM:显示信息和一些效应;

                    (3)CSS:给数据定义样式;

                     (4)XML:作为转换数据的格式。

Ajax的工作原理:

  (1)建立连接:

A、创建核心对象XMLHttpRequest的函数:

Ajax建立连接,就不得不提XMLHttpRequest对象,XMLHttpRequest对象是Ajax的核心对象,Ajax通过XMLHttpRequest实现异步交互。

以下是获取Ajax的XMLHttpRequest对象的过程:

function getXhr(){   //getXhr()是一个封装函数名,可自定义

var xhr=null;  //定义一个变量xhr

if(window.XMLHttpRequest){   //核心对象存在于window对象中,if语句是为了判断浏览器的兼容性

xhr=new XMLHttpRequest();  //这句话表明可兼容除IE外的其他浏览器

}else{

xhr=new ActiveXObject("Microsoft.XMLHttp");  //兼容IE浏览器及IE8之前的浏览器

}

return xhr;  //返回XMLHttpRequest对象

}

说明:

获取Ajax的XMLHttpRequest对象的过程非常重要,实现Ajax主要依靠此对象,因此务必牢记此过程。

局部变量和全局变量同名时,在函数中只能找到局部变量,因此“var Xhr=get Xhr();”是成立的。

B、与服务器建立连接—open()方法:

open()方法的格式:open(method,url,async)

*method:设置当前请求类型—“GET”和“POST”;

 url:设置当前请求地址;

 async:布尔类型,

            async=“true”,表示异步,为默认值,一般可省略不写;

            async=“false”,表示同步,会产生警告,不推荐使用同步效果。

例子:xhr.open("GET","01.html");

  (2)发送请求—send()方法

send()方法的格式:send(请求参数)

请求参数的格式为:“key=value”

例子:xhr.send("user=Zhang");

**说明:

若open()方法的请求类型为“GET”,则send()方式是无法向服务器发送请求数据的,但是在“GET”请求方式下的send()方法是无法省略的,应当写成如下形式:

         xhr.send(null);

而open()方式则要写成如下形式:

        xhr.open("GET","01.html?user=Zhang");

即,在GET请求方式下,send()方法不省略,且将send()方式的请求参数跟在open()方式的url后。

  (3)进行响应:

使用onreadystatechange事件监听服务器当前通信状态。

格式如下:

xhr.onreadystatechange=function(){

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

var data=xhr.responseText;    //获得字符串形式的响应数据

或者:

var dtata=xhr.responseXML;   //获得XML形式的响应数据

}

}

*xmlhttp.readyState的值及解释:

0:请求未初始化(还没有调用 open())。
1:请求已经建立,但是还没有发送(还没有调用 send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。

*xmlhttp.status的值及解释:

100——客户必须继续发出请求
101
——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求  
合起来
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本

1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求

xmlhttp.readyState==4 && xmlhttp.status==200的解释:请求完成并且成功返回。


完整的代码例子:

<html>
<head>
<meta charset="utf-8">
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","01.html",true);
xmlhttp.send();
}
</script>
</head>
<body>


<div id="myDiv"><h2>使用 AJAX 显示html内容</h2></div>
<button type="button" οnclick="loadXMLDoc()">显示内容</button>


</body>
</html>                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值