【笔记】——Javascript(3)Ajax 篇

九、Ajax

——认识Ajax

Asynchronous JavaScript and XML(异步JS与XML)【Asynchronous [e'sɪŋkrənəs]】

  一种使用现有标准的新方法,基于javascrpt和http请求(HTTP requests)。

  一种网页局部更新的技术(通过在后台与服务器进行少量数据交换 实现异步更新),用于创建快速动态网页的技术。

1)Ajax基础概念

①传统Web应用程序模式:【同步交互的形式;不连贯:处理-等待-处理-等待....】

       【笔记】——Javascript(3)Ajax 篇

②Ajas:异步交互的形式:在客户端与服务器之间 引用一个中间媒介——用于异步连接服务器。

  浏览器 在执行任务时 装载了Ajax引擎。【该引擎由JS编写,常位于页面框架中,负责转发C与S的交互】

  用JS调用Ajax引擎:实现页面局部更新。【节省宽带、加快Web浏览速度】

基于Ajax的Web应用模型:

       【笔记】——Javascript(3)Ajax 篇

优点:1、减轻服务器负担,加快速度。Ajax运行时仅按需从服务器获取数据,而非整个文档。

         2、更好的用户体验。网页类似桌面程序。

         3、Ajax基于标准化并被广泛使用,无需下载plugin。

         4、促进 页面呈现与数据分离。

2)Ajax 组成部分:

①Ajax集合了四种技术:

1、JavaScript: 用JS 编写Ajsx。JA像胶水 粘合各部分;【如:操作DOM;用className改变CSS样式等】

2、CSS:         通过CSS独立修改 用户界面样式。

3、DOM:        通过JS 编写DOM,使Ajax应用程序在运行时 改变用户界面/局部更新某节点。

4、XMLHttpRequest对象:与服务器异步通信,能从服务器 以后台形式 获取数据。数据格式常为XML/文本。

②Ajax中四种技术的配合:

         【笔记】——Javascript(3)Ajax 篇

——Ajax 应用实例

1)Google Maps

    ①局部更新。

  ②动态提示 即时获取的信息。【Ajax获取数据的一个原则】

2)Gmail

    ①新邮件提示。每隔一段时间自动收取邮件。

    ②文本框 匹配相关提示。

3)Netflix

    随鼠标事件 自动提示 详细信息。

4)Amazon钻石搜索

    拖动滑动横条,自动获取 相关搜索结果,无需刷新页面。

5)Ajax游戏

    无需安装客户端程序的 “国际象棋小游戏”等网页游戏。

 

 

——Ajax异步交互

1)什么是异步交互

    ①异步交互有别于传统的同步交互(一件一件事情按顺序完成),能同时处理多件事务。

    ②通过AjaxJS无需等待服务器的响应,而是:等待服务器响应使可执行其他脚本,当响应就绪后进行处理,故当服务器繁忙或缓慢时,应用程序会挂起或停止。

         【笔记】——Javascript(3)Ajax 篇

2)异步对象 连接服务器

Ajax的核心对象XMLHttpRequest在IE5中被作为ActiveX控件 首次引入。

①通过XMLHttpRequest对象事项异步访问:

1、创建一个异步对象:xmlHttp

    现代浏览器均内建XMLHttpRequest对象:【IE7+, Firefox, Chrome, Opera, Safari

    IE使用ActiveX对象创建:【IE6

       【笔记】——Javascript(3)Ajax 篇

异步对象 属性&方法:

规定请求类型
open()
参数:method,url,async,user,password
method为请求类型、url为文件在服务器的地址
user、password表用户名、密码。【可选】
发送请求
send(null/string)
GET类型请求,参数为null
POST类型请求,参数为string
取消请求
abort()
 
添加请求的Http头
setRequestHeader()
参数:header,value
Haeder规定头的名称、value规定头的值。
获取响应的全部Http头
getAllResponseHeaders()
 
获取响应的指定Http头
getResponseHeader()
 
状态变化时的事件控制对象
onreaderstatechange对象
 
请求的状态
readyState
0请求未初始化、1已建立服务器连接、
2请求已接收、3、请求成功,正接收数据
4、接收成功,响应就绪
服务器响应的文本
responseText
 
服务器响应的XML
responseXML
可当作DOM处理
服务器返回的请求响应值
status
200、请求成功202、请求被接收,处理为完成
400、错误请求404、资源未找到500内部服务器错误

 

2、创建一个请求,并向服务器发送:open()

  ★url中的指定文件:

      *可以为任何类型文件(.txt/.xml) xmlHttp.open("GET","test1.txt",true);

      *或可在响应前执行任务的 服务器脚本文件(.asp/.php) xmlHttp.open("GET","9-1.aspx",true);

  ★当async=false时,无需编写onreaderstatechange事件的监听函数,只需将代码放在send()语句后。

3、发出请求后,创建 请求状态(readerState属性)改变时(onreadystatechange事件)的监听函数。

  XMLHttpRequest对象的三个属性:

      onreadystatechange()readerState属性改变时触发此函数。

      readyState:判断请求状态;

      status:判断服务器返回的响应状态:

       【笔记】——Javascript(3)Ajax 篇

4、发送请求:send(str)【str为必需参数】如var str=“myName=isaas&age=25”;  send(str);

  当GET请求,这些参数作以查询字符串提交;

  当POST请求,则作为HTTP的POST方式提交。

      使用POST提交请求时,发送前需设置请求的HTTP头:

      xmlHttp.serRequestHeader(“Content-Type”,“ appplication/x-www-form-urlencoded”);

  ★不发送数据时,使用:xmlHttp.send(null)

5、服务器收到请求后,根据请求返回响应结果:

  响应结果 存于respanseXML属性或respanseText属性(读取储存非xml的数据,返回字符串响应)。

    如:alert(“服务器返回:”+xmlHttp.respanseText);

★BugIE会自动缓存服务器响应的结果,但修改服务器的响应结果,IE仍然执行上次的响应结果。

  解决:1、使每次请求的Url不同。可在url末尾添加时间对象getTime()方法。

      2、或添加随机数:xmlHttp.open("GET","123.asp?t="+Math.random(),true);

 

Callback回调函数:

函数1以参数的形式,传递给函数2,函数1就称为回调函数【在回调函数中会执行作为参数的那个函数】

function(callback){
    // 代码
    // 以上代码执行完毕后执行回调函数
    if(typeof callback === "function")
        callback();
}

★对于多个Ajax任务,应该创建一个标准函数,用于创建XMLHttpRequest对象。每个Ajax任务直接调用。

    其中参数可为URL和onreadystatechange事件函数。

 

 

3)GET和POST模式

①GET请求:直接将数据放在 异步请求的URL地址中,而send()方法不发送任何数据。

       

②POST模式:将数据统一在send()方法中发送,请求地址没任何信息。必须设置请求文件头。

       

    区别:

    GET比较简单快速。

    POST常用于:无法使用缓存文件(更新服务器上的文件盒数据库)
        向服务器发送大量数据(POST无数据量限制)
        发送包含未知字符的用户输入时,POSTGET更稳定、可靠。

③发送中文字符:GET方法运行正常,POST方法会出现乱码:

  原因:因为异步对象xmlHttp在处理返回的respanseText时,按UTF-8编码进行解码。

  解决:【JS不推荐使用escape()编码对发送的数据,也不推荐使用unescape()对返回的respanseText解码。】

    1、用encodeURI()编码 发送的数据 两次!

   

    2、用decodeURI()解码 返回的数据 一次。

   

4)服务器返回XML

  XML即eXtensible Markup Language,可拓展标记语言。

        万维网协会(W3C)创建XML用于克服HTML不能自定义标记的局限。

  实际功能:主要用于数据的存储。

①用respanseXML对象获取 返回的XML。

5)处理多个异步请求

①冲突:当异步对象为全局变量时,前几次的返回数据可能会被最后一次覆盖。

   解决:将异步对象作为 局部变量处理(在函数内声明),并在收到返回值后 手动删除。

        delete xmlHttp; //删除返回结果后手动删除

        xmlHttp = null;

 

 

 

——Ajax框架

将一些相对不变的步骤 封装成固定框架。

——实例1:自动校验的表单

1)搭建框架

   【笔记】——Javascript(3)Ajax 篇

①思路:当输完“用户名”后失焦时,进行后台校验。文本框 采用onblur()。

    <input type="text" onblur="startCheck(this)" name="User">

②Tip:startCheck()函数中,先检测内容是否为空,为空:聚焦空文本框,并进行提示。

   【笔记】——Javascript(3)Ajax 篇

③然后创建异步对象、创建请求状态处理函数onreadystatechange()、创建请求open()、设置发送send():

 

 

 

【笔记】——Javascript(1)

【笔记】——Javascript(2)

 

你可能感兴趣的:(JavaScript)