`
cxshun
  • 浏览: 724542 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ajax小谈

阅读更多

最近在做项目时经常用到ajax,当然有个很好的jquery在那时就省去了自己写那一堆XMLHttpRequest对象的麻烦了,但用久了它,发现渐渐地忘记了普通的ajax怎么去写了。现在重新来回顾一下,也跟各位童鞋一起学习一下。

首先建了一个测试的数据库,数据库建表语句如下:

create table `user` (
	`id` double ,
	`name` varchar (60),
	`password` varchar (60)
); 

  我们建立一个TestServlet来处理我们的ajax请求,这个需要在web.xml中进行配置,这里就不写配置文件了。

TestServlet中对post请求的处理如下:

		protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Connection conn = null;
		String name = req.getParameter("name");
		resp.setContentType("text/html;charset=UTF-8");
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ajax","root","root");
			PreparedStatement pstat = conn.prepareStatement("select * from user where name=?");
			pstat.setString(1,name);
			ResultSet rs = pstat.executeQuery();
			//记数器,判断是否存在该用户
			int count = 0;
			while(rs.next()){
				count ++;
			}
			
			//当找不到该用户时,返回相应的错误信息
			PrintWriter out = resp.getWriter();
			if (count == 0){
				out.println("不存在该读者");
			} 
			out.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

  接下来就是我们的JSP文件,名字随便啦:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>My JSP 'index.jsp' starting page</title>
	<script type="text/javascript" src="<%=request.getContextPath() %>/jquery-1.4.4.js" ></script>
	<script type="text/javascript">
		function changeName(){
			var $name = $("input[name='name']").val();
			$.ajax({
				type:"post",
				url:"<%=request.getContextPath()%>/testServlet",
				data:{name:name},
				beforeSend:function(){
					$("#result").append("<img src='<%=request.getContextPath()%>/loading.gif'/>");
				},
				success:function(text){
					//$("#result").html(text);
				}
			});
		}
	</script>
  </head>
  
  <body>
    <form action="" method="post" >
    	姓名:<input type="text" name="name" onchange="changeName()"/><span id="result"></span><br/>
    	密码:<input type="password" name="passwd" /><br/>
    	<input type="submit" value="登录"/>
    </form>
  </body>
</html>

  这里注意一下,我在当前JSP的目录下放了一个jquery-1.4.4.js文件,当然jquery也就是用的是1.4.4版本的,这个版本跟以前的在选择器方面有些不同,以前用的当需要选择属性时需要添加@符号,比如查找所有名字为name的input标签,在jquery 1.3中需要写为:

$("input[@name='name']")

  而在新的版本的jquery中,@符号已经被去除,只需要这样:

$("input[name='name']")

  即可。

 

上面的$name变量命名表明现在这个变量是jquery变量,方便查看代码。

我的代码中用到testServlet这是我的TestServlet对应的URL。

直接运行就得到了:

这里一直在转是因为我把那个success中的代码注释掉了。如果把注释去掉我们刷新一下再看看效果就有:

这里也就是曾经许多童鞋在论坛上问过的需要在后台进行长时间处理东西,希望在前台显示一个东西表示正在处理,这样就可以处理了。只需要在beforeSend中添加需要处理的,处理完之后要记得把它替换掉,不然处理完还在转啊转啊就郁闷了。

 

上面我们是直接用jquery来处理的,我们直接用js呢,也很简单,只不过创建XMLHttpRequest的时候需要进行多种判断以适合万恶的IE,看一下代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'index.jsp' starting page</title>
	<script type="text/javascript" src="<%=request.getContextPath() %>/jquery-1.4.4.js" ></script>
	<script type="text/javascript">
		var request;
		function changeName(){
			var name = document.getElementsByName("name")[0].value;
			try{
				request = new XMLHttpRequest();
			}catch(trymicrosoft){
				try{
					request = new ActiveXObject("Microsoft.XMLHTTP");
				}catch(failed){
					request = false;
				}
			}
			if (request){
				request.open("post","<%=request.getContextPath()%>/testServlet?name="+name,true);
				request.onreadystatechange=getResult;
				request.send(null);
			}
		}

		function getResult(){
			if (request.readyState == 2)
				$("#result").append("<img src='<%=request.getContextPath()%>/loading.gif'/>");
			if (request.readyState == 4)
				if (request.status == 200)
					;//这里没语句的话需要加上;//$("#result").html(request.responseText);
		}
	</script>
  </head>
  
  <body>
    <form action="" method="post" >
    	姓名:<input type="text" name="name" onchange="changeName()"/><span id="result"></span><br/>
    	密码:<input type="password" name="passwd" /><br/>
    	<input type="submit" value="登录"/>
    </form>
  </body>
</html>

    这里我们看到,直接用js来发送ajax请求,需要多很多代码,其实这些jquery已经帮我们做了,我们看不到而已。

运行后,我们可以看到效果:


 
  我们看到它一直在滚,并没有消失,对,这跟前面的效果一样。

  那么我们把:

$("#result").html(request.responseText);

  这句话的注释给去了,我们看到了效果:

这也跟我们前面的效果一样,成功返回了结果。

那么那个2代表什么呢?这个还需要看一下ajax的运行状态:

0:请求没有发出(在调用 open() 之前)。
1:请求已经建立但还没有发出(调用 send() 之前)。
2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。
4:响应已完成,可以访问服务器响应并使用它。

  大家可以一个个试试,1对应的就是jquery中的beforeSend,而4就是success,其他状态用得不多,有兴趣的童鞋可以试试,看jquery中有没有相对应的属性。

 

很多童鞋有时候会发现ajax返回的结果是乱码,这里不要紧张,分析一下原因,应该是因为编码不一致,因为是返回给页面才出现乱码,这里我们需要用:

response.setContentType("text/html;charset=UTF-8");

   不要跟着写哦,注意按自己页面的编码来写。

  • 大小: 1.9 KB
  • 大小: 2.1 KB
  • 大小: 1.9 KB
  • 大小: 2 KB
2
0
分享到:
评论
1 楼 MrPengPeng 2011-07-08  
很好写的 详细  。。。。。呵呵我这个菜鸟 都 学会了 !哈哈哈

相关推荐

    AJAX原理 原理 AJAX

    我们在平时的开发中都多多少少的接触或者应用到了AJAX,谈到AJAX技术的意义,我们关注得最多的毫无疑问是提升用户的体验。但是,如果我们结合将来电脑和互联网的发展趋势,我们会发现AJAX技术在某些方面正好代表了...

    浅谈AJAX 技术与优缺点

    ### 浅谈 AJAX 技术及其优缺点 #### 一、AJAX 技术简介 AJAX(Asynchronous JavaScript and XML)是一种用于构建交互式 Web 应用的技术,它允许 Web 页面无需重新加载整个页面即可动态地更新部分数据。这项技术最...

    浅谈多个有序ajax访问示例

    在JavaScript的世界里,Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许在不刷新整个页面的情况下,从服务器获取数据并局部更新页面。在实际应用中,我们经常需要发送多个Ajax请求来获取...

    Ajax 学习心得和经验谈

    令人兴奋的技术,宝贵的实用经验和心得!

    基于Ajax技术的Web 2.0开发应用

    【Ajax技术概述】 Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,实现了网页的异步更新,显著提高了用户的交互体验...

    浅谈与AJAX相关的几种技术.pdf

    "浅谈与AJAX相关的几种技术" 本文将对与AJAX相关的几种技术进行简单介绍,包括XHTML、CSS、XML、XSLT和DOM等。 首先,AJAX技术丰富的功能、交互性以及快速的响应能力受到人们广泛青睐,但实际上AJAX是多种老技术的...

    Struts2之ajax初析的并结合jquery一个例子

    Struts2之ajax初析的并结合jquery一个例子 Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持...首先不谈Struts2的原生支持,我们自己写一个ajax示例,使用异步请求,直接请求action动作:

    ASP.NET AJAX 入门系列(个人经验谈)

    ASP.NET AJAX 是微软提供的一种用于构建富客户端Web应用程序的技术,它允许开发者在不刷新整个页面的情况下更新页面的部分区域,从而提升用户体验。以下是对ASP.NET AJAX入门的一些关键知识点的详细解释: 1. **...

    再谈Jquery Ajax方法传递到action(补充)

    ### Jquery Ajax方法传递到Action的补充说明 #### 1. Ajax在前端与后端的数据交互 Ajax(Asynchronous JavaScript and XML)技术是实现网页异步数据交互的重要手段。在Web开发中,前端可以通过Ajax向服务器发送...

    Dom&Ajax思维导图总结.png

    jQuery中的Ajax应用&lt;思维导图&gt;· Ajax杂谈· 思维体系---技术思维、业务数据思维、产品思维、复合思维· 小谈抽象思维(思维篇)·

    浅谈js的ajax的异步和同步请求的问题

    在讲解JavaScript中的Ajax技术时,经常会遇到异步和同步请求的问题。本文旨在深入探讨这一问题,并通过实例代码说明在Ajax调用中如何控制这两种请求方式。 Ajax(Asynchronous JavaScript and XML)是一种在无需...

    试谈Ajax技术及实现.pdf

    Ajax技术及实现 Ajax是一种集合了多种技术的集合,包括JavaScript、XMLHttpRequest、DOM、XML和CSS等,使得浏览器与Web服务器之间可以实现异步数据传输,从而减少数据流量、减轻服务压力、加快网页响应速度。Ajax...

    AJAX技术在教学网站中的应用研究

    本文从研陌b技术发展的起源谈起,分析AJAX能够为传统的研尾b应用带 来些什么,它的优势在什么地方。然后解释AJAX的基本组成技术和核心原理, 展示了最小的AJAX框架应该拥有的组成部分和AJAX数据交互的基础方法。通 ...

    AJAX请求是否真的不安全?谈一谈Web安全与AJAX的关系

    - **CSRF与AJAX**:AJAX请求通常不会自动包含防止CSRF的令牌,因此,为了确保安全性,开发者需要在AJAX请求中手动添加这些令牌。这样,服务器端在验证请求时可以检测到有效的令牌,防止恶意的CSRF攻击。 - **XSS与...

    浅谈Ajax技术实现页面无刷新

    ajax (ajax开发) AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。 AJAX 是一种用于...

    ajax讲义讲座:重新认识web及ajax在web中的应用

    我做ajax的讲座的ppt,有兴趣的...谈了对web应用的重新认识,web的特点,用户的需求,互联网web应用的趋势,ajax在web中的应用,什么是ajax,ajax的知识结构,ajax的核心XHR实现异步,ajax的框架,ajax的未来,air技术

    浅谈Ajax请求与浏览器缓存

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术。在Web应用程序中,前端代码经常需要与服务器进行数据交互,而Ajax请求是实现这一功能的一种方法。浏览器...

    浅谈Ajax相关及其优缺点

    AJAX,即Asynchronous Javascript And XML,可实现无刷新状态更新页面和异步提交 优点: 不需要插件支持 用户体验极佳 提升Web程序性能 减轻服务器和宽带的负担 缺点: 前进后退按钮被破坏 搜索引擎的支持不够 开发...

    浅谈Ajax和JavaScript的区别

    **Ajax与JavaScript的区别** Ajax(Asynchronous JavaScript and XML)并非一种独立的技术,而是由一系列技术组合而成的,其中包括JavaScript。JavaScript是一种广泛应用于Web开发的轻量级解释型编程语言,由网景...

    浅谈Ajax的缓存机制

    Ajax的缓存机制和浏览器处理资源时的缓存机制是一样的。 三条简单规则: 只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expires/Last-Modified/ETag头的设置)。 只要是POST请求,...

Global site tag (gtag.js) - Google Analytics