JR 精品文章 - AJAX进一阶应用
AD: jr (at) javaresearch.org


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

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2SE综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
AJAX进一阶应用
nuaaqy 原创   更新:2006-07-24 15:36:52  版本: 1.0   

解决的问题:当通过AJAX多次提交请求,而服务器端反映比较慢,导致只有最后一个请求被响应的现象。
首先 提供一个简单的ajax应用,包含两个jsp文件,一个提交请求,一个处理请求。
提交请求:ajaxtest.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>
ajaxtest
</title>
<script language="javascript">
    var count = 0;
    var running = false;
    var http_request;
    function send_request(url) {//初始化、指定处理函数、发送请求的函数
        http_request = false;
        //开始初始化XMLHttpRequest对象
        if(window.XMLHttpRequest) { //Mozilla 浏览器
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {//设置MiME类别
                http_request.overrideMimeType('text/xml');
            }
        }
        else if (window.ActiveXObject) { // IE浏览器
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }
        if (!http_request) { // 异常,创建对象实例失败
            window.alert("不能创建XMLHttpRequest对象实例.");
            return false;
        }
        http_request.onreadystatechange = processRequest;
        // 确定发送请求的方式和URL以及是否同步执行下段代码
        http_request.open("GET", url, true);
        http_request.send(null);
    }
    // 处理返回信息的函数
    function processRequest() {
        if (http_request.readyState == 4) { // 判断对象状态
            if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
                var rtext = http_request.responseText;
        document.getElementById("refreshtext").innerHTML = rtext + "<br>"
            + document.getElementById("refreshtext").innerHTML;
            } else { //页面不正常
                alert("您所请求的页面有异常。");
            }
        }
    }

    function refreshTable() {
        k = new Date();
        send_request('ajaxtestresponse.jsp?count=' + (++count) + '&refreshtime='+k);
    }

    //window.setTimeout('refreshTable()',10000);
</script>
</head>
<body bgcolor="#ffffff">
<h1>
AJAX TEST</h1><br>
<input type="button" onClick="refreshTable();" value="ClickMe">
<br>
<span id="refreshtext"></span>
</body>
</html>
响应请求:ajaxtestresponse.jsp
<%

    String count = request.getParameter("count");
    String ctime = request.getParameter("refreshtime");
    try {
      Thread.sleep(5000);
    }
    catch (InterruptedException ex1) {
    }
    out.write("Hello world-"+count+"-"+ctime);

 %>
其中,提交请求包含一个技术参数,响应请求延迟5秒左右的时间,再返回请求,以表示系统延迟比较大。

在tomcat中运行http://localhost:8080/ajaxtest.jsp 点击按钮,发送请求,然后等待回应,如果在没有回应之前,连续点击按钮提交请求,虽然后台接收到了这些请求,但是由于对运行状态的判断,web浏览器只能接收到最后一个返回的响应。

为了让浏览器能够全部接受返回的信息,有两个办法:
1、将
        // 确定发送请求的方式和URL以及是否同步执行下段代码
        http_request.open("GET", url, true);
改为
 http_request.open("GET", url, false);
表示等到响应接收到后,才能进行其它操作, 这样web浏览器发送请求后会有较长时间的停顿,影响客户体验,不好。

2、将
 function refreshTable() {
        k = new Date();
        send_request('ajaxtestresponse.jsp?count=' + (++count) + '&refreshtime='+k);
    }
改为
   function refreshTable() {
    if(http_request){
      if(http_request.readyState!=4) {
        window.setTimeout('refreshTable()',500);
        return;
      }
    }
        k = new Date();
        send_request('ajaxtestresponse.jsp?count=' + (++count) + '&refreshtime='+k);
    }
增加状态判断,并进行延迟。 客户体验好。

有点体会,就和大家共享一下,不足之处,还请多指教,欢迎讨论。






版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     11       1
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: cownew开源-eclipse3.2插件向3.1移植经验 上一篇文章
返回文章列表 返回〔J2SE综合〕
下一篇文章 主题: Vector & ArrayList 哪一个更好?为什么?


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

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

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