zoukankan      html  css  js  c++  java
  • 一个Ajax简单实例分析

      Ajax能够使用户的体验更加愉快,它可以提供响应更加灵敏的UI,并消除页面刷新所带来的闪烁。目前,由于要刷新整个页面,需要传送大量的数据,因为必须重新发送整个页面。  

          原始的Ajax:直接使用XmlHttpRequest

      Ajax的核心是JavaScript对象XmlHttpRequest。

    首先,您拥有一些简单的定位点标记,它连接到一个JavaScriptcastVote(rank)函数。

    function castVote(rank) {
      var url = "/ajax-demo/static-article-ranking.html";
      var callback = processAjaxResponse;
      executeXhr(callback, url);
    }

      该函数为您想要与之通信的服务器资源创建一个URL并调用内部函数executeXhr,提供一个回调JavaScript函数,一旦服务器响应可用,该函数就被执行。由于我希望它运行在一个简单的Apache环境中,“cast vote URL”只是一个简单的HTML页面。在实际情况中,被调用的URL将记录票数并动态地呈现包含投票总数的响应。

      下一步是发出一个XmlHttpRequest请求:

    function executeXhr(callback, url) {
      // branch for native XMLHttpRequest object
      if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = callback;
        req.open("GET", url, true);
        req.send(null);
      } // branch for IE/Windows ActiveX version
      else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
          req.onreadystatechange = callback;
          req.open("GET", url, true);
          req.send();
        }
      }
    }

      如您所见,执行一个XmlHttpRequest并不简单,但非常直观。和平常一样,在JavaScript领域,大部分的工作量都花在确保浏览器兼容方面。在这种情况下,首先要确定XmlHttpRequest是否可用。如果不能用,很可能要使用Internet Explorer,这样就要使用所提供的ActiveX实现。

    executeXhr()方法中最关键的部分是这两行:

    req.onreadystatechange = callback;
    req.open("GET", url, true);

      第一行定义了JavaScript回调函数,您希望一旦响应就绪它就自动执行,而req.open()方法中所指定的“true”标志说明您想要异步执行该请求。

      一旦服务器处理完XmlHttpRequest并返回给浏览器,使用req.onreadystatechange指派所设置的回调方法将被自动调用。

    function processAjaxResponse() {
      // only if req shows "loaded"
      if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
          $('votes').innerHTML = req.responseText;
        } else {
          alert("There was a problem retrieving the XML data:\n" +
          req.statusText);
        }
      }
    }

      该代码相当简洁,并且使用了几个函数,这使得难以一下子看出发生了什么。为了弄清楚这一点,下面的表格,列举了常用的XmlHttpRequest对象属性。

    属性

    描述

    onreadystatechange

    每次状态改变所触发事件的事件处理程序

    readyState

    对象状态值:

    • 0 = 未初始化(uninitialized)
    • 1 = 正在加载(loading)
    • 2 = 加载完毕(loaded)
    • 3 = 交互(interactive)
    • 4 = 完成(complete)

    responseText

    从服务器进程返回的数据的字符串形式

    responseXML

    从服务器进程返回的DOM兼容的文档数据对象

    status

    从服务器返回的数字代码,比如404(未找到)或200(就绪)

    statusText

    伴随状态码的字符串信息

      现在processVoteResponse()函数开始显示出其意义了。它首先检查XmlHttpRequest的整体状态以保证它已经完成(readyStatus == 4),然后根据服务器的设定询问请求状态。如果一切正常(status == 200),就使用innerHTML属性重写DOM的“votes”节点的内容。

  • 相关阅读:
    边框上带有文字
    满屏展示
    javaScript中SetInterval与setTimeout区别
    圆形进度条
    抢购(秒杀)业务的技术要点
    Sybase 动态改变存储过程里查询的数据库
    在Hibernate映射文件里配置Sequence
    初学struts2杂乱笔记
    Struts2的学习链接
    DWR框架在web.xml的完整配置及注释
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663916.html
Copyright © 2011-2022 走看看