href="css.css" type="text/css" rel="stylesheet" />

使用 Ajax.Request 类


如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建 XMLHttpRequest 对象并且异步的跟踪它的进程,然后解析响应并处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。

为了支持 AJAX 功能。这个包定义了 Ajax.Request 类。

假如你有一个应用程序可以通过http://yoursever/app/get_sales?empID=1234&year=1998 与服务器通信。它返回下面这样的 XML 响应:

 
<?xml version="1.0" encoding="utf-8" ?> 
<ajax-response>
    <response type="object" id="productDetails">
        <monthly-sales>
            <employee-sales>
                <employee-id>1234</employee-id> 
                <year-month>1998-01</year-month> 
                <sales>$8,115.36</sales> 
            </employee-sales>
            <employee-sales>
                <employee-id>1234</employee-id> 
                <year-month>1998-02</year-month> 
                <sales>$11,147.51</sales> 
            </employee-sales>
        </monthly-sales>
    </response>
</ajax-response>    

用 Ajax.Request 对象和服务器通信并且得到这段 XML 是非常简单的。下面的例子演示了它是如何完成的:

 
<script>...
    function searchSales()
    ...{
        var empID = $F('lstEmployees');
        var y = $F('lstYears');
        var url = 'http://yourserver/app/get_sales';
        var pars = 'empID=' + empID + '&year=' + y;
        
        var myAjax = new Ajax.Request(
            url, 
            ...{
                method: 'get', 
                parameters: pars, 
                onComplete: showResponse
            });
        
    }

    function showResponse(originalRequest)
    ...{
        // 将返回的 XML 放到 textarea 内
        $('result').value = originalRequest.responseText;
    }
</script>

<select id="lstEmployees" size="10" onchange="searchSales()">
    <option value="5">Buchanan, Steven</option>
    <option value="8">Callahan, Laura</option>
    <option value="1">Davolio, Nancy</option>
</select>
<select id="lstYears" size="3" onchange="searchSales()">
    <option selected="selected" value="1996">1996</option>
    <option value="1997">1997</option>
    <option value="1998">1998</option>
</select>
<br><textarea id=result cols=60 rows=10 ></textarea>

你注意到传入 Ajax.Request 构造方法的第二个对象了吗?参数 {method: 'get', parameters: pars, onComplete: showResponse} 表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为 method 值为 'get' 的属性,另一个属性名为 parameters 包含 HTTP 请求的查询字符串,和一个 onComplete 属性/方法包含函数 showResponse。

还有一些其它的属性可以在这个对象里面定义和设置,如 asynchronous,可以为 true 或 false 来决定 AJAX 对服务器的调用是否是异步的(默认值是 true)。

这个参数定义 AJAX 调用的选项。在我们的例子中,在第一个参数通过 HTTP GET 命令请求那个 url,传入了变量 pars 包含的查询字符串,Ajax.Request 对象在它完成接收响应的时候将调用 showResponse 方法。

也许你知道,XMLHttpRequest 在HTTP请求期间将报告进度情况。这个进度被描述为四个不同阶段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 对象在任何阶段调用自定义方法 ,Complete 是最常用的一个。想调用自定义的方法只需要简单的在请求的选项参数中的名为 onXXXXX 属性/方法中提供自定义的方法对象。 就像我们例子中的 onComplete。你传入的方法将会被用一个参数调用,这个参数是 XMLHttpRequest 对象自己。你将会用这个对象去得到返回的数据并且或许检查包含有在这次调用中的HTTP 结果代码的 status 属性。

还有另外两个有用的选项用来处理结果。我们可以在 onSuccess 选项处传入一个方法,当 AJAX 无误的执行完后调用,相反的,也可以在 onFailure 选项处传入一个方法,当服务器端出现错误时调用。正如 onXXXXX 选项传入的方法一样,这两个在被调用的时候也传入一个带有 AJAX 请求的 XMLHttpRequest 对象。

我们的例子没有用任何有趣的方式处理这个 XML 响应, 我们只是把这段 XML 放进了一个文本域里面。对这个响应的一个典型的应用很可能就是找到其中的想要的信息,然后更新页面中的某些元素, 或者甚至可能做某些 XSLT 转换而在页面中产生一些 HTML。

在 1.4.0 版本中,一种新的事件回传外理被引入。如果你有一段代码总是要为一个特殊的事件执行,而不管是哪个 AJAX 调用引发它,那么你可以使用新的 Ajax.Responders 对象。

假设你想要在一个 AJAX 调用正在运行时,显示一些提示效果,像一个不断转动的图标之类的,你可以使用两个全局事件句柄来做到,其中一个在第一个调用开始时显示图标,另一个在最后一个调用完成时隐藏图标。看下面的例子。

 
<script>
    var myGlobalHandlers = ...{
        onCreate: function()...{
            Element.show('systemWorking');
        },

        onComplete: function() ...{
            if(Ajax.activeRequestCount == 0)...{
                Element.hide('systemWorking');
            }
        }
    };

    Ajax.Responders.register(myGlobalHandlers);
</script>

<div id='systemWorking'><img src='spinner.gif'>Loading...</div>

更完全的解释,请参阅 Ajax.Request 参考和options 参考。

ajax prototype框架之Ajax.Request 类相关推荐

  1. 基于.Net 写我自己的Ajax后台框架AjaxFramework

    小小目录: 为什么要写自己的Ajax后台框架 框架的简单设计说明 框架如何使用 框架使用效果图 框架的优缺点 框架源码下载 1.为什么要写自己的Ajax后台框架 现在Ajax在web应用方面已经用的稀 ...

  2. 不用AJAX框架实现AJAX效果

    AJAX( Asynchronous JavaScript and XML),即:javascript和XML; 是一种进行页面局部异步处理数据的技术,用AJAX向服务器发送请求和获取服务器返回的数据 ...

  3. 自学Python第二十二天- Django框架(三) AJAX、文件上传、POST 请求类型之间的转换、多APP开发、iframe、验证码、分页器、类视图、中间件、信号、日志、缓存、celery异步

    Django官方文档 django 使用 AJAX django 项目中也可以使用 ajax 技术 前端 前端和其他 web 框架一样,需要注意的是,django 接收 POST 请求时,需要 csr ...

  4. Django框架 之 Ajax

    Django框架 之 Ajax 浏览目录 AJAX准备知识 AJAX与XML的比较 AJAX简介 jQuery实现的ajax AJAX参数 AJAX请求如何设置csrf_token 序列化 一.AJA ...

  5. 基于JQuery框架的AJAX

    基于JQuery框架的AJAX/jquery这个类库相当不错...简单..功能还强大在JQuery中,AJAX有三种实现方式:$.ajax(),$.post,$.get().XHTML(主要):< ...

  6. 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传

    运行界面(话不多说先上图) 运行之后的index界面,有登陆.注册功能 登陆界面,输入数据库中用户名.密码不为空且密码是加密的数据,进入main界面 注册界面,用的bootstrop的弹窗,用户名和密 ...

  7. yaf框架的ajax,yaf官方请求处理

    ## Yaf官方文档参考 http://php.net/manual/zh/class.yaf-request-abstract.php http://www.laruence.com/manual/ ...

  8. 【Spring MVC学习笔记 六】SpringMVC框架整合AJAX完成局部刷新

    本篇Blog介绍另一个常用的技术Ajax.虽然Ajax可以脱离SpringMVC去使用,但是SpringMVC对AJax有更好的支持 AJAX概念概述 AJAX即Asynchronous Javasc ...

  9. 实例讲解《Microsoft AJAX Library》(2):DomEvent类

    引言: 大家都知道Ajax的之所以能如此丰富地实现,客户端脚本功不可没.而像Asp.Net Ajax这般庞大的工程,没有脚本类库的支撑是很难想象的.<Microsoft AJAX Library ...

最新文章

  1. 360度看IT行业--3月12日西安工程大学讲座
  2. 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
  3. 1.2 操作系统的发展和分类(手工、单道/多道批处理、分时、实时、网络、分布式、嵌入式、个人计算机)
  4. authenticate总是返回None
  5. Firebug Tutorial (Section 3): Script Tab :Javascript Debugging
  6. numpy维度交换_如何将2个不同维度的numpy数组相乘
  7. MySQL 修改视图
  8. 这个统一了238个机器学习模型R包的参考手册推荐给你
  9. Java之美[从菜鸟到高手演变]之Spring源码学习 - 环境搭建
  10. app/bootstrap.php.cache : failed to open stream: No such file or directory
  11. Java语言所有异常类均继承自_要继承自定义异常类的继承方式必须使用 ( ) 关键字_学小易找答案...
  12. 创业不容易,小本创业就更加难
  13. redis13---事务处理。
  14. lotus Domino调用webservice
  15. 头歌实践平台:机器学习——支持向量回归
  16. 算法图解:像小说一样有趣的算法入门书
  17. 计算机程序设计基础梁建坤,云浮工匠梁建坤:无怨无悔 不忘初心
  18. 只要400行代码就能自已实现一个绘图机原型固件,esp8266 + micropython 用3d打印机改的绘图机
  19. ubuntu11.10 安装谷歌拼音输入法详细步骤
  20. How to fix the global rice crisis 如何应对全球稻米危机 | 经济学人20230401版双语精翻

热门文章

  1. 从零开始搭建Kafka+SpringBoot分布式消息系统
  2. 【图文步骤】EC-Engineer部分操作详细步骤
  3. android framework资源,android源码framework下添加新资源的方法
  4. Opencv的Mat内容小记
  5. 使用java操作ES
  6. 随机密码生成。编写程序,在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。
  7. 【JAVA】-- setBorder
  8. 取消iview UI框架的Radio选中状态
  9. SpringCloud系列--eureka(三)服务发现DiscoveryClient
  10. python网页爬虫循环获取_手把手教你用 Python 搞定网页爬虫