`
里克尔奇
  • 浏览: 36107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于jQuery的AJAX应用研究

阅读更多
摘 要:在目前的Web2.0热潮中,AJAX正吸引着全世界的眼球,成为人们谈论最多的技术术语。AJAX技术很大程度改善了WEB应用的用户体验,jQuery的创建和使用大大简化了AJAX的开发。本文首先对AJAX技术与传统Web开发进行了对比分析,阐述AJAX技术异步交互的优势,其次,通过一个实例,在具体应用中体现jQuery的特点,最后,总结全文论述以及展望。
关键词:jQuery;AJAX;异步交互;XMLHttpRequest
中图分类号:TP312
1. 引 言
目前,网络正处于Web2.0[1]时代,在这个时代出现了大量的相关技术,Ajax就是其中具有代表性之一。AJAX正吸引着全世界的眼球,成为人们谈论最多的技术术语,大量学者开始研究或是正在研究AJAX技术。
如果开发者使用单纯的Javascript方式进行Ajax开发的话,就会使得应用程序非常难以进行调试,从而降低了生产效率,并且大量的Javascript代码使得程序复杂化,处理时间相对增加,影响用户体验。但是,Ajax技术已经催生出了大量的基于其本身技术的JavaScript库。JavaScript库的使用有助于最大程度地减少使用JavaScript和Ajax带来的许多常见问题。jQuery[3]就是其中非常优秀的一个简洁快速的JavaScript库。很多学者把其称作Ajax框架,但笔者认为它还没有达到框架的级别。jQuery封装了B/S开发过程中的大量技术细节,使开发人员能够更专注于动作业务逻辑的开发和用户界面流程的开发。本文实现一个实例,通过实例分析,在具体应用中体现jQuery的特点。
2. AJAX简介
2.1 AJAX是什么
    AJAX( Asynchronous JavaScript And XML)翻译成中文是指异步的JavaScript和XML技术。其实AJAX不是一种单独的技术或是一门计算机语言,它是多种成型技术的综合,它包括以下五方面内容:(1)使用XHTML和CSS的基于标准的表示技术。(2)使用DOM进行动态显示和交互。(3)使用XML和XSLT进行数据交换和处理。(4)使用XMLHttpRequest进行异步数据检索。(5)使用JavaScript将以上技术融合在一起。笔者认为Ajax技术的核心是JavaScript对象XMLHttpRequest[3],该对象是一种异步发送请求的技术, AJAX技术使用异步HTTP请求,在Browser和Web server之间传送数据,使Browser只更新部分页面內容而不用重新載入整个新的页面。异步交互和不用转入新的页面视图也是Ajax大大改善用户体验的地方。
2.2 AJAX效果与传统WEB开发的优势
传统的Web应用允许用户填写表单,当提交表单时就向Web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。Ajax应用与此不同,Ajax应用可以仅向服务器发送并取回必需的数据,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。

图2-1传统WEB交互方式

图2-2AJAX技术交互方式
如图2-1和图2-2对比所示,Ajax引擎代表用户与服务器进行通信,并更新用户所看到的界面。整个交互过程是在后台异步进行的,并不打断用户当前的操作。另外,由于Ajax只与服务器端进行数据层面的交换,而一些页面显示、校验数据等功能则交给Ajax引擎自己来做。Ajax将一些服务器端的工作转移到客户端,充分利用了客户端闲置的处理能力,从而减轻了服务器的负担,加快了浏览器的响应速度,缩短了用户等待时间[4]。
3. jQuery简介
3.1 jQuery是什么
jQuery 由 John Resig 创建于 2006 年初,对于任何使用 JavaScript 代码的程序员来说,它是一个非常有用的 JavaScript 库。无论是刚刚接触 JavaScript 语言,并且希望获得一个能解决文档对象模型(Document Object Model,DOM)脚本和 Ajax 开发中一些复杂问题的库,还是作为一个厌倦了 DOM 脚本和 Ajax 开发中无聊的重复工作的资深 JavaScript 专家,jQuery 都会是首选。它能在网页上简单的操作文档、处理事件、运行动画效果或者添加Ajax交互[5]。
3.2 jQuery能做什么
jQuery的宗旨是WRITE LESS,DO MORE,写更少的代码,做更多的事情。jQuery库为WEB脚本编程提供了通用的抽象层,使得它几乎适用于所有脚本编程的情况,仅就其核心特性而言,jQuery能够满足一下需求:(1)取得页面中的元素。(2)修改页面的外观。(3)改变页面内容。(4)响应用户的页面操作。(5)为页面添加动态效果。(7)无需刷新即可从服务器端取得数据。(8)简化常见的JavaScript任务。这些策略不仅确保了jQuery包的小型化——压缩之后约为20KB,同时,也为我们使用这个库的自定义代码保证简介提供了技术保障[6]。
下面是一个简单示例,它说明了 jQuery 对代码的影响。要执行一些真正简单和常见的任务,比方说为页面的某一区域中的每个链接附加一个单击(click)事件,您可以使用纯 JavaScript 代码和 DOM 脚本来实现,代码如下:
var external_links = document.getElementById('external_links');
var links = external_links.getElementsByTagName('a');
for (var i=0;i < links.length;i++) {
    var link = links.item(i);
    link.onclick = function() {
        return confirm('You are going to visit: ' + this.href);
    };
}
以下代码显示了使用 jQuery 实现的相同的功能。
$('#external_links a').click(function() {
    return confirm('You are going to visit: ' + this.href);
});
使用 jQuery,可以把握问题的要点,只让代码实现我们想要的功能,而省去了一些繁琐的过程。无需对元素进行循环,click() 函数将完成这些操作。同样也不需要进行多个 DOM 脚本调用。我们只需要使用一个简短的字符串对所需的元素进行定义即可。我们使用了 $() 函数 —— jQuery 中功能最强大的函数。通常,我们都是使用这个函数从文档中选择元素。在本例中,一个包含有一些层叠样式表(Cascading Style Sheet,CSS)语法的字符串被传递给函数,然后 jQuery 尽可能高效地把这些元素找出来。#external_links 用于检索 id 为 external_links 的元素。空格后的a表示 jQuery 需要检索 external_links 元素中的所有 <a> 元素。$() 函数返回一个含有所有与 CSS 选择器匹配的元素的 jQuery 对象。jQuery 对象 类似于数组,但是它附带有大量特殊的 jQuery 函数。本例只是简要介绍一下jQuery的操作,更多详细关于jQuery的函数操作可以查看jQuery的API,在jQuery官网和各大jQuery社区都可以下载得到jQuery的API。
jQuery的适用性一方面归因于其设计理念,另一方面则得益于围绕这个开源项目涌现的活跃社区的作用。jQuery除了为工程师工程师提供提供了灵活而稳定的系统之外,jQuery的最终产品对所有人都免费。
4. jQuery对AJAX的实现
4.1 使用jQuery开发过程
在进行基于jQuery的AJAX开发前,我们必须准备好开发环境和jquery.js这个JavaScript库文件。本实例使用的开发环境是IntelliJ[7] IDEA 7.0.3,使用IntelliJ的原因是Intellij IDEA是一款综合的Java 编程环境,它对JavaScript的支持可以说是所有IDEA中最好的,它强大的代码辅助功能对编写JavaScript能力薄弱的或是很恐惧JavaScript代码的人是最好不过的选择。另外,jQuery的最新版本是v.1.3.2版本,可以从jQuery的官方网站(http://jquery.com/)下载得到一个jquery.js的js文件这个文件就是我们开发中要使用的js文件。在开发时只要把这个jquery.js放在一个公共的位置,在相应的页面导入之即可。
本例是一个简单的校验用户名是否存在的例子,本例的jQuery应用主要包括4个部分:Html文档,为该页面添加行为的JavaScript文件,另外是web.xml配置文件和用Java语言编写的简单的后台操作,这个后台操作只是最基本的后台操作,并不包含很复杂的方法,我们主要是把精力放在jQuery的实现上,但根据需要我们可以对后台业务进行扩展。代码部分包含了一下注释信息,这些注释信息很好的解释了几乎每句代码操作的作用。
首先,打开IntelliJ,新建一个Project(IntelliJ中的Project相当于Eclips中的WorkSpace,即工作空间),其次新建一个Module,即一个项目,然后在这个Module下的web目录下新建一个Html文档,名称为jquery.html,代码如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  <title>校验用户名是否存在</title>
<!—此处要注意引入jQuery库文件的<script>标签必须放在引入自定义脚本文件的<script>标签之前-->
<script type="text/javascript" src="jslib/jquery.js"></script>
  <script type="text/javascript" src="jslib/verify.js"></script>
</head>
<body>
       用户名校验的jQuery实例,请输入用户名: <br/>
    <!--ajax方式下不需要使用表单来进行数据提交,因此不用写表单标签-->
    <!--ajax方式不需要name属性,需要一个id属性-->
    <input type="text" id="userName" />
    <input type="button" value="校验" onclick="verify()">
    <!-- div用于存放服务器端返回的信息,开始为空,div 是CSS中的块级元-->
    <!--id属性定义是为了找到这个节点,进行操作-->
<!—此div是为了接受并显示服务器端传回的数据-->
        <div id="result"></div>
</body>
</html>
然后在这个Module下的web目录下新建一个jslib文件夹,这个jslib文件夹用于存放js文件,在这个jslib目录下新建一个jquery.js,打开这个空的js文件,把事先下载好的jquery.js打开,把里面的代码拷贝到在jslib目录下的jquery.js文件中,这样做的主要原因是IntelliJ不支持在工程下面直接拷贝文件。然后再在jslib目录下新建一个verify.js,verify.js代码如下所示:
function verify(){
    var url=" JqueryServer?name="+ $("#userName").val();
    url= converURL(url);
    $.get(url,null,function(data){
        $("#result").html(data);
    });
}
//给url地址增加时间戳,骗过浏览器,不读取缓存
function converURL(url){
    //获取时间戳
    var timstamp = new Date().valueOf();
    //将时间戳品拼接到url上
    //url=" JqueryServer "
    if(url.indexOf("?")>=0){
        url=url + "&t=" + timstamp;
    }else{
        url=url + "?t=" + timstamp;
    }
    return url;
}
然后在这个Module下的src目录下新建一个JqueryServer.java文件,这个文件就是简单的后台操作。代码如下所示:
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.net.URLDecoder;
public class JqueryServer extends HttpServlet{
    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
         try{
             httpServletResponse.setContentType("text/html;charset=utf-8");
             PrintWriter out = httpServletResponse.getWriter();
             //此处加入操作Session的代码主要是为了说明如何解决浏览器缓存问题
//在verify.js中利用时间戳,骗过浏览器,不读取缓存。
             Integer inte=(Integer)httpServletRequest.getSession().getAttribute("total");
             int temp=0;
        if(inte==null){
           temp=1;
           httpServletRequest.getSession().setAttribute("total",temp);
        }else{
            temp=inte.intValue()+1;
           httpServletRequest.getSession().setAttribute("total",temp);
        }
              //1.取得页面端送过来的参数信息
               String old = httpServletRequest.getParameter("name");
               //2.检查传过来的参数是否有问题
                if(old==null||old.length()==0){
                    out.println("用户名不能为空!");
                }else{
                //3.进行校验操作
                //此处可以根据情况进行扩展,比如编写复杂的业务层,从数据库中//读取数据。
                    String name = old;
                    if(name.equals("qq")){
                //4.和传统方式的不同之处:把用户感兴趣的数据(data)返回去,而//不是重新转向一个新视图层。与传统写法一样但是但是实质不一样
                    out.println("用户名"+name+"已经存在,请换个用户名"+temp);
                    }else
                    {
                        out.println("用户名["+name+"]不存在,可以注册!"+temp);
                    }
                }
         }catch(Exception e)
    {
        e.printStackTrace();
    }
    }

    protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
              doGet(httpServletRequest, httpServletResponse);
       }
}
之后就要配置刚刚编写的这个Servlet,在WEB-INF目录下的web.xml配置文件进行配置,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">
<servlet>
<servlet-name> JqueryServer </servlet-name>
    <servlet-class> JqueryServer </servlet-class>
</servlet>
    <servlet-mapping>
        <servlet-name> JqueryServer </servlet-name>
        <url-pattern>/ JqueryServer </url-pattern>
    </servlet-mapping>
</web-app>
这些都完成之后,就可把这个简单的应用部署在服务器上了,本实例的服务器是Tomcat6.0,在浏览器地址栏中输入http://localhost:8080/jquery.html即可。
4.2解决jQuery中文乱码和浏览器缓存问题
以上这个实例有一个缺陷是中文乱码问题,接下来主要介绍两种解决中文乱码的方案。其一:在verify.js中发出的数据做一次encodeURI操作,代码修改部分为:
var url="AJAXServer?name="+encodeURI($("#userName").val());
另外在服务器端的JqueryServer.java中也要做修改,即在取得数据后,加入这样一句代码String name =new String(old.getBytes("iso8859-1"),"UTF-8");然后把下面的一句代码:String name = old;删除即可。
其二:在verify.js中发出的数据做两次encodeURI操作,代码修改部分为:
var url="AJAXServer?name="+encodeURI(encodeURI($("#userName").val()));
另外在服务器端的JqueryServer.java中也要做修改,即在取得数据后,加入这样一句代码String name = URLDecoder.decode(old,"UTF-8");然后把下面的一句代码:String name = old;删除即可。
在这两种方法中笔者推荐使用第二种方法。
另外,在JqueryServer.java这个文件中做了相应的处理加入session目的是引入浏览器缓存问题,代码如下:
Integer inte=(Integer)httpServletRequest.getSession().getAttribute("total");
             int temp=0;
        if(inte==null){
           temp=1;
           httpServletRequest.getSession().setAttribute("total",temp);
        }else{
            temp=inte.intValue()+1;
           httpServletRequest.getSession().setAttribute("total",temp);
        }
在verify.js文件之中,利用时间戳骗过浏览器不读取缓存,主要做法是利用时间戳改变URL地址,代码如下:
//给url地址增加时间戳,骗过浏览器,不读取缓存
function converURL(url){
    //获取时间戳
    var timstamp = new Date().valueOf();
    //将时间戳品拼接到url上
    //url=" JqueryServer "
    if(url.indexOf("?")>=0){
        url=url + "&t=" + timstamp;
    }else{
        url=url + "?t=" + timstamp;
    }
    return url;
}
在调用$.get( )前,只需利用converURL ()函数把URL进行转换加上时间戳即可。代码如下:
url= converURL(url);
这样,我们就解决了jQuery中文乱码和浏览器缓存问题。这虽然是个简单的用例,但是,其中解决的jQuery中文乱码和浏览器缓存问题在实际应用之中具有很好的技巧。
5. 结论
本文主要对jQuery实现AJAX应用进行了研究,简要介绍了AJAX技术,分析和研究了AJAX框架技术的应用和其所能解决的实质问题。可以得到结论,Ajax框架通过异步数据请求、精细的UI效果正在改变着人们对Web应用系统的看法[8]。把AJAX技术与传统WEB应用进行了对比研究,说明了AJAX应用具有异步交互和增加用户体验等优点。针对jQuery在AJAX应用开发中的作用进行了分析,并实现一个完整实例,对这个实例进行了详细的解析,通过这个实例,利用时间戳解决了浏览器缓存问题,并且提出了两种方式解决jQuery的中文乱码问题,这两个问题的解决方法对实际应用开发具有很好的指导意义。
Ajax技术及其在J2EE Web中开发的研究与应用必将成为J2EE的主流,另外,jQuery已确认成为ASP.NET MVC和Visul Studio未来版本中的正式组成部份,诺基亚手机平台Web Run-Time也将纳入,有这样的发展环境,jQuery也一定会有更加广阔的发展空间。


参考文献
[1] Tim O'Reilly.Web2.0.http://www.enet.com.cn/article/2005/1122/A20051122474593.shtml, 2005-11-22.
[2] http://jquery.com,2009-11-19.
[3] Anne van Kesteren.W3C Working Draft.http://www.w3.org/TR/XMLHttpRequest/,2009-11-19.
[4] JESSE JAMES GARRETT.Ajax:A new approach to Web applications[EB/OL] .
http://www.tejiawang.com/book_1_7333_0_0_0_0_6.html.
[5] Jesse Skinner.使用 jQuery 简化 Ajax 开发.
http://www.ibm.com/developerworks/cn/xml/x-ajaxjquery.html.
[6] Jonathan Chaffer,Karl Swedbeger.jQuery基础教程[M].李松峰 李炜.北京:人民教育出版社,2008.
[7] http://baike.baidu.com/view/1654125.htm?fr=ala0_1.
[8] 张东华.Ajax框架在J2EE架构中的应用与研究[D].青岛:中国海洋大学,2008.





The Research of AJAX application based on jQuery

Abstract
In the current boom of the Web2.0, AJAX is attracting the world's eyes, becoming the most talked-about technical terms by people of the word. AJAX has improved experience of the users in WEB application. The creation and use of jQuery has simplified the development of AJAX greatly. In this paper,first, the author have a compare and analysis between the AJAX and traditional development of the Web, and expound advantage of the asynchronous,second, show the characteristics of jQuery in the specific applications through an example,at last,have a summary on the paper ,then look into the future about AJAX and jQuery.
Keywords: jQuery,AJAX, Asynchronous,XMLHttpRequest

分享到:
评论

相关推荐

    基于jQuery的Ajax聊天室程序

    【基于jQuery的Ajax聊天室程序】是一个典型的Web交互应用,它利用了Ajax技术来实现实时的、无需页面刷新的用户交流。Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页...

    基于jquery的ajax对话框

    "基于jQuery的ajax对话框"是一个利用jQuery实现的功能,它可以在不刷新整个页面的情况下,通过Ajax技术加载并显示新的内容在一个弹出的对话框里,提供了一种优雅的用户体验。 首先,让我们来了解jQuery的核心概念。...

    jquery Ajaxupload应用

    AjaxUpload是一款基于jQuery的插件,它通过异步方式实现文件上传,避免了传统文件上传时整个页面刷新的问题。这种技术依赖于HTML5的FormData对象(对于不支持HTML5的浏览器,它会退回到IFrame上传),提供了一种优雅...

    php基于jquery的ajax技术传递json数据简单实例.docx

    jQuery 库可以帮助我们快速地开发网页应用程序,在本例中,我们使用 jQuery 库来实现 Ajax 功能。 POST 请求 POST 请求是一种 HTTP 请求方法,用于将数据从客户端发送到服务器端。在本例中,我们使用 POST 请求将...

    基于jQuery中的Ajax应用初步

    本教程将对基于jQuery的Ajax应用进行初步探讨。** ### 一、jQuery与Ajax的结合 jQuery库通过$.ajax()函数提供了对Ajax的全面支持。这个函数是jQuery中进行Ajax请求的核心,它可以处理GET、POST以及其他HTTP请求...

    基于Jquery和Ajax的多选框

    标题“基于Jquery和Ajax的多选框”暗示我们关注的是如何利用这两项技术来实现一个功能完善的多选框组件。这种组件通常用于用户需要从多个选项中选择一个或多个的情况,如设置偏好、选择服务等。 描述中提到,这个...

    传智播客 jQuery ajax 课件

    本篇文章将深入解析jQuery中的AJAX应用,结合传智播客的课件内容,帮助读者掌握这一核心技术。 首先,我们需要了解AJAX的基本概念。AJAX并不是一个单一的技术,而是一种使用现有技术组合的方式,主要包括...

    基于 jQuery 实现的 Ajax 异步分页

    为了解决这个问题,我们可以采用基于jQuery的Ajax异步分页技术。本篇文章将详细介绍如何利用jQuery实现Ajax异步分页,以及其背后的原理和实践应用。 首先,让我们理解什么是Ajax。AJAX(Asynchronous JavaScript ...

    jquery ajax demo

    jQuery UI是基于jQuery的一个扩展库,提供了许多可交互的UI组件,如对话框、日期选择器、拖放功能等。在使用jQuery AJAX时,jQuery UI可以辅助构建更丰富的用户界面。 综上所述,"jquery ajax demo"涵盖了jQuery ...

    基于jqueryajax+cropper+springboot的图片裁剪和存储程序.zip

    Spring Boot是Java开发的一个微服务框架,简化了创建独立的、生产级别的基于Spring的应用程序。在这里,它作为后端服务器,负责接收前端发送的图片数据,进行存储,并能够响应前端的查询请求,返回图片信息。 4. *...

    基于jQuery的Ajax在线词典

    在基于jQuery的Ajax应用中,jQuery库简化了原本复杂的JavaScript原生Ajax操作。jQuery提供了一个易于使用的$.ajax()函数,使得开发者可以轻松地发起Ajax请求。在这个"基于jQuery的Ajax在线词典"项目中,$.ajax()函数...

    jQuery+ajax实现三级级联

    在IT行业中,jQuery和ajax是两个非常重要的技术,它们在构建动态、交互性强的Web应用程序时发挥着关键作用。在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的...

    Struts2+jQuery ajax的一个商品小系统

    Struts2和jQuery是两种非常流行的Java Web开发技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。Struts2作为一个MVC(Model-View-Controller)框架,提供了强大的控制层逻辑,而jQuery则是一种高效的...

    基于jquery的Ajax后台模板框架

    这个基于jQuery的Ajax后台模板框架,旨在为这类企业应用提供基础架构。 综上所述,该框架结合了jQuery的Ajax功能和后台管理模板的设计理念,为开发者提供了一个起点,以构建高效、易用的后台管理系统。然而,实际...

    springMVC jQuery ajax交互

    总结来说,SpringMVC与jQuery的Ajax交互使得Web应用能提供更加流畅、动态的用户体验。通过jQuery简化前端的Ajax调用,配合SpringMVC处理后端业务逻辑,我们可以构建出高效、响应式的Web应用。这种技术组合在现代Web...

    基于JQuery框架的AJAX实例代码

    在这个"基于JQuery框架的AJAX实例代码"中,我们将探讨如何使用jQuery提供的API,包括`$.ajax`,`$.post`和`$.get`,来实现异步数据传输。 1. **$.ajax()** `$.ajax()`是jQuery中最全面的AJAX方法,它可以处理GET和...

    C# Asp.net Jquery Ajax 经典案例

    在IT行业中,C#、Asp.net、Jquery和Ajax是构建高效、动态Web应用程序的关键技术。本篇文章将深入探讨这些技术以及它们在实际开发中的经典应用案例。 首先,C#是一种面向对象的编程语言,由微软公司为.NET框架开发。...

    基于Jquery的Ajax的Java交互

    本篇将深入探讨基于Jquery的Ajax如何与Java后台进行交互,以及在交互过程中如何模拟网络延迟并展示加载图片。 首先,Ajax的核心功能是实现页面的局部刷新,它允许我们在不重新加载整个网页的情况下,从服务器获取...

Global site tag (gtag.js) - Google Analytics