赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

J2SE综合:与你一起讨论AJAX进一阶应用

发布时间:2008.01.11 04:55     来源:赛迪网    作者:nuaaqy

解决的问题:当通过AJAX多次提交请求,而服务器端反映比较慢,导致只有最后一个请求被响应的现象。
首先 提供一个简单的ajax应用,包含两个jsp文件,一个提交请求,一个处理请求。
提交请求:ajaxtest.jsp
<%@ page contentType="text/html; charset=GB2312" %>


<BR>ajaxtest<BR>

    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 + "
"
            + document.getElementById("refreshtext").innerHTML;
            } else { //页面不正常
                alert("您所请求的页面有异常。");
            }
        }
    }

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

    //window.setTimeout('refreshTable()',10000);




AJAX TEST









响应请求: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);
    }
增加状态判断,并进行延迟。 客户体验好。
       (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· JSP/Servlet:Servlet/JSP会话跟踪机制 (01-10) · JSP/Servlet/JSF:提升JSP应用程序效率 (01-10)
· 基于AJAX的动态树型结构的设计与实现 (01-10) · 将Javaclass文件转为EXE文件的八种方法 (01-10)
· I/O及网络--一个简单的文件传送代码 (01-10) · J2SE综合:浅析Java语言中两种异常的差别 (01-10)
· 敏捷开发的七种武器 (01-09) · SQL Server 2000 JDBC驱动程序 (01-09)
· Java JRE下载(JRE 1.4) (01-09) · 21天学JAVA源代码 (01-09)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 网银交易收费 我国银行业如何达国际化标准
· 家庭信息化普及率提高 网上缴费成为新时尚
· 五条黄金准则能够让CIO巧妙加薪 CIO焦虑调查
· 网上书店解决方案 深圳边检指挥中心ITSM项目
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统