zoukankan      html  css  js  c++  java
  • AjaxStudyNote

    AjaxStudyNoteBy:Silvers:
    (E:Video_TutorialsJava自学视频尚硅谷JavaEE培训6WEB基础-Ajax)
    15:02 2016/2/29
    什么是Ajax
    Ajax技术的产生
    Ajax被认为是(Asynchronous JavaScript and XML的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax。

    • 不用刷新整个页面便可与服务器通讯的办法:
      Flash
      Java applet
      框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面
      隐藏的iframe
      XMLHttpRequest:该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。是创建Ajax应用的最佳选择。
      实际上通常把Ajax当成XMLHttpRequest对象的代名词。
      Ajax工具包
      Ajax并不是一项新技术,它实际上是几种技术,每种技术各尽其职,以一种全新的方式聚合在一起。
      服务器端语言:服务器需要具备向浏览器发送特定信息的能力。Ajax与服务器端语言无关。
      XML(eXtensible Markup Language,可扩展标记语言)是一种描述数据的格式。Ajax程序需要某种格式化的格式赖在服务器和客户端之间传递信息,XML是其中的一种选择。
      XHTML(eXtended Hypertext Markup language,使用扩展超媒体标记语言)和CSS(Cascading Style Sheet,级联样式单)标准化呈现;
      DOM(Document Object Model,文档对象模型)实现动态显示和交互;
      使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取
      使用JavaScript绑定和处理所有数据。
      
      Ajax的缺陷
      Ajax不是完美的技术。使用Ajax,它的一些缺陷不得不权衡一下:
      由JavaScript和Ajax引擎导致的浏览器的兼容
      页面局部刷新,导致后退等功能失效。
      对流媒体的支持没有Flash、Java Applet好。
      一些手持设备(如手机,pad等)支持性差。
      
      XMLHttpRequest的概述
      • XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准。
      • 创建XMLHttpRequest对象(由于非标准所以实现方法不统一)
        Internet Explorer把XMLHttpRequest实现为一个ActiveX对象
        其他浏览器(FireFox、Safari、Opera…)把它实现为一个本地的JavaScript对象
        XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。
        XMLHttpRequest的方法
        方法 描述
        abort()                      停止当前请求
        getAllResponseHeaders()                  把Http请求的所有响应首部作为键值对返回
        getResponseHeader("header")                 返回指定首部的串值
        open("method", "url")                              建立对服务器的调用。Method参数可以是GET、POST或PUT.url参数可以是相对URL或绝对URL。
        send(content)                                          向服务器发送请求
        setRequestHeader("header","value")        把指定首部设置为所提供的值。在设置任何首部之前必须先调用open()
        onreadystatechange                                每个状态改变是都会触发这个事件处理器,通常会调用一个JavaScript函数
        seadyState                                              请求的状态,有5个可取值:0表示初始化、1表示正在加载、2表示已经加载,3表示交互中,4表示完成。
        responseText                                           服务器的响应,表示为一个串。
        responseXML                                           服务器的响应,表示为XML。这个对象可以解析为DOM对象
        status                                                      服务器的HTTP状态码(200对应ok,404对应NotFount等)
        statusText                                                HTTP状态码的相应文本(OK或NotFount等)
        
        发送请求
        利用XMLHttpRequest实例与服务器进行通信包含以下3个关键部分:
        * onreadystatechange事件处理函数
            该事件处理函数由服务器触发,而不是用户
            在Ajax执行过程中,服务器会通知客户端当前的通信状态。这依靠更新XMLHttpRequest对象的readyState来实现。改变readyState属性是服务器对客户端连接操作的一种方式。每次readyState属性的改变都会触发readystatechange事件
        * open方法
        
        open(method,url,asynch)
              XMLHttpRequest对象的open方法允许程序员用一个Ajax调用向服务器发送请求。
              method:请求类型,类似“GET”或“POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。
              在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,就会带来不好的结果。在此将时间戳追加到URL的最后,就能确保URL的唯一性,从而避免浏览器缓存结果。
               url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。
               asynch:表示请求是否要异步传输,默认值为true。指定true,在读取后面的脚本之前,不需要等待Ajax请求执行完毕再继续执行。                   
        * send方法
        
        接收相应
        用XMLHttpRequest的方法可向服务器发送请求。在Ajax处理过程中,XMLHttpRequest的如下属性可被服务器更改:
        readystate
        status
        responseText
        responseXML
        readyState
        readyState 属性表示Ajax请求的当前状态。他的值用数字代表。
        0代表未初始化。还没有调用open方法;1代表正在加载。open方法已被调用,但sen的方法还没有被调用;2代表已加载完毕。send已被调用。请求已经开始;3代表交互中。服务器正在发送响应。4代表完毕。响应发送完毕。
        每次readyState值得改变,都会触发readystatechange事件。如果把onreadystatechange事件处理函数赋给一个函数。那么每次readyState值的改变都会引发该函数的执行。
        readyState值得变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把readyState的值统一设为4。
        Status
        服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。
        常用状态妈及其含义:
        404没找到页面(not found)
        403禁止访问(forbidden)
        500内部服务器出错(internal service error)
        200一切正常(ok)
        304没有被修改(not modified)
        在XMLHttpRequest对象中,服务器发送的状态码都保存在status属性里。通过把这个值和200或304比较,可以确保服务器是否已发送了一个成功的响应。
        responseText
        XMLHttpRequest的responseText属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。
        当readyState属性值变成4时,responseText属性才可用,表明Ajax请求已经结束。
        
        responseXML
        如果服务器返回的是XML,那么数据将储存在responseXML属性中。
        只用服务器发送了带有正确首部信息的数据时,responseXML属性才是可用的。MIME类型必须为text/xml
        
        发送请求
        setRequestHeader(header,value)
        当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是POST还是GET。
        Ajax请求中,发送首部嘻嘻的 工作可以有setRequestHeader该完成
        参数header:首部的名字;参数value:首部的位置。
        如果用POST请求向服务器发送数据,需要将”Content-type”的首部设置为”application/x-www-form-urlencoded”。它会告知服务器正在发送数据,并且数据已经符合URL编码了。
        该方法必须在open()之后才能调用
        数据格式提要
        在服务器端Ajax是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。
        从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言只能以如下3种格式返回数据
        XML
        Json
        HTML(innerHTML)
        HTML小结:
        优点:
        从服务器端发送的HTML代码在浏览器端不需要用JavaScript进行解析。
        HTML的可读性好。
        HTML代码块与innerHTML属性搭配,效率高。
        缺点:
        若需要通过Ajax更新一篇文档的多个部分,HTML不合适
        innerHTML并非DOM标准。
        XML
        1.结果为XML格式,需要使用responseXML来获取
        2.结果不能直接使用,必须先创建对应节点,再把节点加入到#details中
        目标格式为:

        Andy Budd


        http://andybudd.com/
        XML
        优点:
        XML是一种通用的数据格式。
        不必把数据强加到已定义好的格式中,而是要为数据定义合适的标记。
        利用DOM可以完全掌控文档。
        缺点:
        如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么responseXML的值将是空的。
        当浏览器接收到长的XML文件后,DOM解析可能会很复杂。
        JSON
        JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。
        JSON的规则很简单:对象是一个无序的”‘名称/值’对”集合。一个对象以”{“(左括号)开始,”}”(右括号)结束。每个”名称”后跟一个”:”(冒号); “ ‘名称/值’ 对”之间”,”(逗号)分隔。
        JSON用冒号(而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。
        对象描述中存储的数据可以是字符串,数字或布尔值。对象描述也可储存函数,那就是对象的方法。
        解析JSON
        JSON只是一种文本字符串。它被存储在responseText属性中
        为了读取存储在responseText属性中的JSON数据,需要根据JavaScript的eval语句。
        函数eval会把一个字符串当做它的参数。然后这个字符串会被当作JavaScript代码来执行。因为JSON的字符串就是由JavaScript代码构成的,所以它本身是可执行的。
        example: var jsonResponse = xhr.responseText;
        var personObject = eval("(" + jsonResponse +")");
        val name = personObject.person.name;
        var website = personObject.preson.website;
        var email = personObject.person.email;
        
        JSON提供了json.js包,下载http://www.json.org/json.js后,使用parseJSON()方法将字符串解析成JS对象
        var jsonResponse = xhr.responseText;
        var personObject = jsonResponse.parseJSON();
        var name = personObject.person.name;
        var website = personObject.person.website;
        var email = personObject.person.email;
        
        把一个字符串转为JSON对象!alert(JSONStr.name);
        eval() 可以把一个字符串转化为本地的JS代码来执行
        JSON小结
        优点:
        作为一种数据传输格式,JSON与XML很相似,但是它更加灵巧。
        JSON不需要从服务器端发送含有特定内容类型的首部信息。
        缺点:
        语法过于严谨。
        代码不易读。
        eval函数存在风险。
        HTML、XML、JSON对比
        • 若应用程序不需要与其他应用程序共享数据的时候,使用HTML片段来返回数据时最简单的。
        • 如果数据需要重用,JSON文件是个不错的选择,其在性能和文件大小方面有优势。
        • 当远程应用程序未知时,XML文档是首选,因为XML是Web服务领域的”世界语”。
          JQuery中的Ajax
          JQuery对Ajax操作进行了封装,在JQuery中最底层的方式是$.ajax(),第二层是load(), $.get()和 $.post()。第三层是$.getScript()和$.getJSON()
          load()方法
        • load()方法是JQuery中最为简单和常用的Ajax方法,能载入远程的HTML代码并插入到DOM中,它的结构是:load(url[,data][,callback])
          参数名称 类型 说明
            url                         String                 请求HTML页面的url地址
          data(可选)      Object              发送到服务器的key/value数据
          
          callback(可选) Function 请求完成时的回调函数,无论请求成功或失败
        • 程序员只需要使用JQuery选择器为HTML片段指定目标位置,然后将要加载的文件的url做为参数传递给load()方法即可。
          load()方法 ——细节
          如果只需要加载目标HTML页面内的某些元素,则可以通过load()方法的URL参数来达到目的,通过URL参数指定选择符,就可以方便的从加载过来的HTML文档中选出所需要的内容。load()方法的URL参数的语法结构为”url selector”(注意:url和选择器之间有一个空格)
          传递方式:load()方法的传递参数根据参数data来自动自定。如果没有参数传递,采用GET方式传递,否则采用POST方式
          对于必须在加载完才能继续的操作,load()方法提供了回调函数,该函数有三个参数:代表请求返回内容的data;代表请求状态的textStatus对象和XMLHttpRequest对象。
          任何一个html节点都可以使用load方法来加载Ajax,结果将直接插入html节点中。
          $.get() (或$.post())方法
        • $get()方法使用GET方式来进行异步请求,他的结构是:$.get(url[,data][,callback][,type]);
          参数名称 类型 说明
              url                   String                  请求html页面的url地址
          data(可选)               Object                 发送到服务器的key/value数据会作为QueryString附加到请求URL中
          callback(可选)          Function             载入成功时回调函数(只有当Response的返回状态是success才调用该方法)自动将请求结果和状态码传递给该方法
          type(可选)                String                  服务器返回内容的格式。包括xml、html、script,Json,text和_default
          
        • $.get()方法的回调函数只有两个参数:data代表返回的内容,可以是xml文档,JSON文件,html片段等;textstatus代表请求状态,其值可能为:succuss,error,notmodify,timeout 4种。
        • $.get()和$.post()方法时JQuery中的全局函数,而find()等方法都是对JQuery对象进行操作的方法。
          **阶段总结:
        1. 什么是Ajax? 不用刷新页面,但可以和服务端进行通讯的方式。使用Ajax的主要方式是XMLHttpRequest对象
        2. 使用XMLHttpRequest对象实现Ajax。[了解]
        3. Ajax传输数据的3种方式:
          a. XML:笨重,解析困难。但xml是通用的数据交换格式。
          b. HTML:不需要解析可以直接放到文档中,若仅更新一部分区域,但传输的数据不是很方便,且HTML代码需要拼装完成。
          c. JSON:小巧,有面向对象的特征,且有很多第三方的jar包可以把Java对象或集合转为JSON字符串。
        4. 使用JQuery完成Ajax操作
          a. load方法:可以用于HTML文档的元素节点,把结果直接加为对应节点的子元素。通常而言,load方法加载的数据是一个。
          var $obj = …
          var url = ….
          var args = {key:value,….};
          $obj.load(url,args);
          b. $.get,$.post,$.getJSON:更加灵活,除去使用load方法的情况,大部分时候都使用这3个方法
          基本的使用
          // url:Ajax 请求的目标URL
          // args:传递的参数:JSON类型
          // data:Ajax 响应成功后的数据,可能是xml,html,JSON
          $.get(url,args,function(data){

    })
    请求JSON数据
    $.get(url, args, function(data)
    {
    },”JSON”);
    $.post(url, args, function(data)
    {
    }, “JSON”);
    $.getJSON(url, args, function(data)
    {
    })
    使用JackSon

      • 加入jar包:
        jackson-annotations-2.2.2.jar
        jackson-core-2.2.2.jar
        jackson-detabind-2.2.2.jar
      • 具体的使用步骤:
        ①创建org.codehaus.jackson.map.ObjectMapper对象
        ②调用ObjectMapper的writerValueAsString方法把Java对象或集合转为JSON字符串
      • example:
        ObjectMapper mapper = new ObjectMapper();
        String jsonStr = mapper.writeValueAsString(customer);
        ** 注意:
        ①. JackSon根据getter来定位JSon对象的属性,而不是字段! 
        ②. 可以在类的getter方法上添加注解:org.codehaus.jackson.annotate.JsonIgnore.在转化JSON对象时以忽略该属性!
        ③. jackSon还可以把一个字符串转化为Java对象(不常用) 
        
        案例需求: 实现城市 ->部门 ->员工 ->员工的详细信息的Ajax显示
        1. 3张数据表
          locations: location_id,city
          departments: department_id,department_name,location_id
          employees: employee_id,last_name,salary,email,department_id
        2. 需要新学习JQuery的一个插件:blockUI
        3. 准备工作:可以在页面上显示所有的城市信息
          /emplyees.jsp
          —重定向–> EmployeeServlet’s listLocations(获取了全部的Location信息,并把locations放入到request中了)
          —转发 —> /WEB-INF/pages/employees.jsp(使用JSTL显示了所有的城市的信息)
        4. 使用BlockUI:Ajax 请求发出时执行$.blockUI,Ajax响应送达时执行$.unblockUI
          $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
          可以对样式做出修改:需要把$.blockUI 包含在一个function(){}中
          $(document).ajaxStart(function()
          {
          $.blockUI(
          {
          message: $(‘#loading’),
          css:
          {
          top: $(window).height() - 400) / 2 + 'px',
          left: $(window).width() - 400)  / 2 + 'px',
           '400px',
          border: 'none'         
          
          },
          overlayCss: { backgroundColor: ‘#fff’ }
          })
          })
          具体的效果可以参看文档。
  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/Silvers/p/5861770.html
Copyright © 2011-2022 走看看