AJAX应用手册.docx
《AJAX应用手册.docx》由会员分享,可在线阅读,更多相关《AJAX应用手册.docx(65页珍藏版)》请在冰豆网上搜索。
AJAX应用手册
一Ajax回显server端的执行信息
今天有人问"页面可以用ajax通过事件调java方法,但有是我想把java方法执行过程中的某些提示信息自由自动的反馈给页面。
该怎么办",我下来就做了一个demo.现在贴上来,供后来者参考.
我用的是spring环境,所有的controller都继承子Controller;
RegisteController:
用来模拟用户注册的步骤,它会产生一些执行过程中的信息放到一个链表里;
InfoController:
用来把链表中最顶端的那条信息.发送给客户.
用prototype的ajax来发送请求.
发送请求的同时,发送另外一个请求用来得到执行过程中的提示信息.而这个过程递归执行,直到收到"finish" 消息.
jsp文件,用来发送ajax请求和显示回显信息.
注意导入的prototype的路径.
1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2.
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3.
4.
5.
Testing page6.
7.
8. function postAjax(){
9. var myAjax = new Ajax.Request(
10. 'register.do',
11. {
12. method:
'post',
13. parameters:
{username:
'username', password:
'password'},
14. onComplete:
doComplete
15. }
16. );
17. alert("request send.");
18. getInfo();
19. }
20. function getInfo(){
21. var infoAjax = new Ajax.Request(
22. 'info.do',
23. {
24. method:
'get',
25. parameters:
{},
26. onComplete:
doResult
27. }
28. );
29. }
30.
31. function doResult(req){
32. if(req.responseText=='finish'){
33. return;
34. }
35. //alert(req.responseText);
36. var myDiv = document.createElement("div");
37. var infoText = document.createTextNode(req.responseText);
38. myDiv.appendChild(infoText);
39. $(info).appendChild(myDiv);
40. //循环发送请求得到执行信息.
41. getInfo();
42. }
43.
44. function doComplete(){
45.
46. }
47.
48.
49.
50. html,body {
51. font-family:
Verdana, Arial, Helvetica, sans-serif;
52. font-size:
11pt;
53. margin:
0;
54. padding:
0;
55. border:
0 none;
56. overflow:
hidden;
57. height:
100%;
58. }
59. .title{
60. font-weight:
bold;
61. }
62.
63.
64.
65.
66.
400px; height:
200px; overflow:
scroll; border:
solid red 1px;">
67.
The response information comes from server:
68.
69.
70.
71.
RegisteController:
1.import java.util.LinkedList;
2.import javax.servlet.http.HttpServletRequest;
3.import javax.servlet.http.HttpServletResponse;
4.
5.import mons.logging.Log;
6.import mons.logging.LogFactory;
7.import org.springframework.web.servlet.ModelAndView;
8.import org.springframework.web.servlet.mvc.Controller;
9.
10.public class RegisteController implements Controller {
11.
12. private Log log = LogFactory.getLog(getClass());
13.
14. public ModelAndView handleRequest(HttpServletRequest arg0,
15. HttpServletResponse arg1) throws Exception {
16. String username = arg0.getParameter("username");
17. String password = arg0.getParameter("password");
18. log.info("username:
" + username + " password:
" + password);
19. /**
20. * 下面的infoList将用来存放执行过程中的提示信息.
21. * 之所以用LinkedList是因为LinkedList具有队列操做的特点.
22. * 最先放进去的信息可以最先被取走.
23. */
24. LinkedList infoList = new LinkedList();
25. /**
26. * 这里放的信息仅仅是起到模拟作用.
27. * 我一次性把所有的信息都放进去了.只是为了模拟效果.
28. * 你可以根据实际需要, 在需要的时候再放入信息.
29. */
30. infoList.add("username:
" + username);
31. //do something else.
32. infoList.add("password:
" + password);
33. //do something else.
34. infoList.add("Try to validate username......");
35. //do something else.
36. infoList.add("this username is valid to use");
37. //do something else.
38. infoList.add("Try to validate password......");
39. //do something else.
40. infoList.add("the password is valid to use");
41. //do something else.
42. infoList.add("Try to add this user into database......");
43. //do something else.
44. infoList.add("try to set entitlement for this user");
45. //do something else.
46. infoList.add("user registering ok.");
47. //do something else.
48. infoList.add("succeed......");
49. arg0.getSession().setAttribute("infoList", infoList);
50. arg1.getWriter().write("succeed");
51. return null;
52. }
53.
54.}
55.
InfoController:
1.import java.util.LinkedList;
2.import javax.servlet.http.HttpServletRequest;
3.import javax.servlet.http.HttpServletResponse;
4.import org.springframework.web.servlet.ModelAndView;
5.import org.springframework.web.servlet.mvc.Controller;
6./**
7. * @author Administrator
8. * 这个controller用来向客户端发送执行过程中产生的信息.
9. */
10.public class InfoController implements Controller{
11.
12. public ModelAndView handleRequest(HttpServletRequest arg0,
13. HttpServletResponse arg1) throws Exception {
14. LinkedList list = (LinkedList)arg0.getSession().getAttribute("infoList");
15. /**
16. * 为了模拟延迟效果, 这里睡一小会儿.
17. */
18. Thread.sleep(1000);
19. if(list==null){
20. arg1.getWriter().write("please wait a second.");
21. return null;
22. }
23. if(list.size()==0){
24. arg1.getWriter().write("finish");
25. return null;
26. }
27. /**
28. * linkedList.remove()将取走第一条信息.
29. */
30. String info = list.remove();
31. arg1.getWriter().write(info);
32. return null;
33. }
34.
35.}
36.
spring配置文件:
1.......
2.
3.
4......
二AJAX级联菜单
AJAX级联菜单实例
说明ajax级联菜单,例如,一级菜单选择中国,二级菜单列出中国城市;一级菜单选择美国,二级菜单列出美国城市。
数据库脚本count.sql
DROPTABLEIFEXISTS`country`;
CREATETABLE`country`(
`id`int(11)NOTNULLauto_increment,
`name`varchar(50)defaultNULL,
`city`varchar(50)defaultNULL,
PRIMARYKEY(`id`)
)ENGINE=MyISAMDEFAULTCHARSET=utf8;
insertintocountryvalues(1,'中国','沈阳');
insertintocountryvalues(2,'中国','北京');
insertintocountryvalues(3,'美国','洛杉矶');
insertintocountryvalues(4,'美国','纽约');
DAO
packageedu.syict.www.dao;
importjava.util.List;
importorg.hibernate.HibernateException;
importorg.hibernate.Query;
importorg.hibernate.Session;
importorg.hibernate.Transaction;
importedu.syict.www.HibernateSessionFactory;
publicclassDBOperator{
@SuppressWarnings("unchecked")
publicListqueryByName(Stringname){
Sessionsession=HibernateSessionFactory.getSession();
Listlist=null;
Stringhql="SELECTco.cityFROMCountryAScoWHEREco.name=?
";
System.out.println(hql+name);
Transactiontx=null;
try{
tx=session.beginTransaction();
Queryquery=session.createQuery(hql);
query.setString(0,name);
list=query.list();
System.out.println("数据库中记录个数:
"+list.size());
mit();
}catch(HibernateExceptione){
if(tx!
=null)
tx.rollback();
throwe;
}finally{
session.close();
}
returnlist;
}
}
Bean类(Hibernate反向工程)Country.java
packageedu.syict.www.POJO;
@SuppressWarnings("serial")
publicclassCountryimplementsjava.io.Serializable{
privateIntegerid;
privateStringname;
privateStringcity;
publicCountry(){
}
publicCountry(Stringname,Stringcity){
this.name=name;
this.city=city;
}
publicIntegergetId(){
returnthis.id;
}
publicvoidsetId(Integerid){
this.id=id;
}
publicStringgetName(){
returnthis.name;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetCity(){
returnthis.city;
}
publicvoidsetCity(Stringcity){
this.city=city;
}
}
Country.hbm.xml
xmlversion="1.0"encoding="utf-8"?
>
DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"
JSP页面
<%@pagelanguage="java"pageEncoding="UTF-8"%>
<%@pageimport="java.util.*"%>
<%@pageimport="edu.syict.www.dao.*"%>
<%@pageimport="edu.syict.www.POJO.*"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
MyJSP'menu.jsp'startingpage<%
Country