JR 精品文章 - ajax 入门 3
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » JSP/Servlet/JSF 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
ajax 入门 3
包子 原创   更新:2008-04-02 12:49:11  版本: 1.0   

才知道ajax应用并不需要一次又一次createXmlHttpRequest,使用框架,一切变得很轻松
Prototype仅仅是一个编写好的js脚本库,跟javascript一样,此脚本库只需在页面引用即可
下载地址: http://prototype.conio.net/dist/prototype-1.4.0.tar.gz
这是一个完全版本,只需要将文件解压,然后在dest目录下拷贝出prototype.js就可以使用,这个文件不需要任何其他文件,只需要在您的项目中拷贝它,引用它,使用它.
这里我使用两个脚本文件来对其进行讲解
  <script src="js/prototype.js"></script>
  <script src="js/test.js" ></script>
在调试的时候使用<script src="js/prototype.js"/>会造成IE页面没有任何显示,也不报错,很不解,希望知道为什么的朋友可以告诉我

要被赋值的文本框
<input type="text" id="userName"></input>
触发事件的button
<input type="button" value="button" onClick="testGEBI('userName')"/><br>
用于输出的局部刷新位置
ss:<span id="ss"></span><br>

test.js中的函数
function testGEBI(str){
    //使用$()代替getElementById()
    $(str).value="button";
    //使用$F取文本框值
    ss.innerHTML=$F("userName");
}
这里$(element)相当于document.getElementById()
    $F(element)相当于document.getElementById().value
使用prototype的好处就在于可以简化我们的代码,减少代码量
其中参数element可以是object对象也可以是id值
类似的方法还有一些,大家可以去查查

Prototype还有一些自定义的对象和类
这里用一个Element对象的empty(element)方法来举例
页面上布置一个触发事件的按钮
<input type="button" value="testEmpty" onClick="isEmpty()"/>
<span id=”ise”></span>
脚本中加入
function isEmpty(){
    if(Element.empty("ss")){
        ise.innerHTML="空元素";
    }
}
这个方法判断id为”ss”的标签内部是否有元素,如果没有返回true,这个对象还有一些hide(element),show(element)等控制元素显示和隐藏的函数

以下是ajax相关的内容,prototype同样为ajax提供了相关函数,避免不停的重复编写createXHR()函数,类有很多,这里只介绍一下Ajax.Request类

脚本中加入
function getXML(){
    //局部请求的地址
    var url="priceAction";
    //创建的 对象名(这个对象名其实在这里并没有被使用过,当对象一被创建,局部请求就已经发出,所以这里不需要使用这个对象名,它完全可以是匿名的)
    var myAjax = new Ajax.Request(
    url,
    {
        method:'post', //请求方法
        onComplete:showResponse, //回调函数
        asynchronous:true //是否异步
    }
    );
}
//回调函数,注意这个回调函数是有参数,用于接收返回的信息
function showResponse(xmlrequest){
    gx.innerHTML=xmlrequest.responseText;
}
页面中加入
xml:<span id="gx"></span><input type="button" value="getXml" onclick="getXML()"/>

可以看到请求被正确发出了,没有浏览器的判断,没有手写的open函数,很简洁

同一页面可以很方便的使用多个XmlHttpRequest对象来进行异步请求
脚本中再加入
function getXML2(){
    var url="priceAction";
    var myAjax = new Ajax.Request(
    url,
    {
        method:'post',
        onComplete:showResponse2,
        asynchronous:true
    }
    );
}

function showResponse2(xmlrequest2){
    gx2.innerHTML=xmlrequest2.responseText;
}
页面中
xml2:<span id="gx2"></span><input type="button" value="getXml2" onclick="getXML2()"/>

然后我们编写一个生成随机数的servlet,注意他的地址和上面的url参数一致
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class PriceAction extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public PriceAction() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out
                .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

        
        Random rand = new Random(System.currentTimeMillis());
        out.write(rand.nextInt(10)+"$"+rand.nextInt(10)+"$"+rand.nextInt(10));
        //System.out.println(rand.nextInt(10)+"$"+rand.nextInt(10)+"$"+rand.nextInt(10));
        out.flush();
        out.close();
    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request,response);
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occure
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

点击两个getXml按钮,可以发现它们并不互相影响,页面也没有被刷新,请求被局部发出,局部刷新.Ajax的框架还有很多,prototype是一个轻量级的,<疯狂的程序员>看到41没有更新了,期待下一期,评论里居然有”燕儿”,不知道她看了绝影的小说以后什么感觉,不喜欢分手的情节,希望绝影兄虚构一下,不要写得太真实了,打击人.

强烈推荐还没看过的朋友去绝影的博客上看看这部小说,很真实,写的不错,已经57万多的点击率
http://blog.csdn.net/hitetoshi/archive/2007/12/22/1958130.aspx
怀念我的大学生活,怀念我的寝室,怀念我的同学们…


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     11       0
作者其它文章: 作者全部文章
评论人:liuchenyu 发表时间: Wed Apr 02 17:28:20 CST 2008
顶一下
评论人:laonongfu 发表时间: Mon Apr 14 21:14:01 CST 2008
[:D]
评论人:laonongfu 发表时间: Mon Apr 14 21:14:18 CST 2008
[:D]
评论人:guoliang 发表时间: Thu Apr 24 17:16:04 CST 2008
ajax是个革命

这个文章共有 4 条评论
 
返回文章列表 返回〔JSP/Servlet/JSF〕
下一篇文章 主题: Jsf + spring + hibernate 开发框架介绍


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号