zoukankan      html  css  js  c++  java
  • 【笔记】——Javascript(3)Ajax 篇

    九、Ajax

    ——认识Ajax

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

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

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

    1)Ajax基础概念

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

           

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

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

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

    基于Ajax的Web应用模型:

           

    优点: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中四种技术的配合:

             

    ——Ajax 应用实例

    1)Google Maps

        ①局部更新。

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

    2)Gmail

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

        ②文本框 匹配相关提示。

    3)Netflix

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

    4)Amazon钻石搜索

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

    5)Ajax游戏

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

     

     

    ——Ajax异步交互

    1)什么是异步交互

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

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

             

    2)异步对象 连接服务器

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

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

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

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

        IE使用ActiveX对象创建:【IE6

           

    异步对象 属性&方法:

    规定请求类型
    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:判断服务器返回的响应状态:

           

    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)搭建框架

       

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

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

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

       

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

     

     

     

    【笔记】——Javascript(1)

    【笔记】——Javascript(2)

     

  • 相关阅读:
    JZPKIL:莫比乌斯反演,伯努利数,Miller_Rabin,Pollard_Rho
    [考试反思]数学专题测试1:遗失
    「专题总结」杜教筛
    「专题总结」莫比乌斯反演2
    「专题总结」莫比乌斯反演1
    「专题总结」线性基
    「专题总结」群论
    「专题总结」后缀自动机SAM
    「专题总结」回文自动机PAM
    「专题总结」后缀数组1~2
  • 原文地址:https://www.cnblogs.com/slowsoul/p/2890327.html
Copyright © 2011-2022 走看看