AJAX初步
1.什么是AJAX
客户端与服务器,可以在【不必刷新整个浏览器】的情况下,与服务器进行异步通讯的技术,即,AJAX是一个【局部刷新】的【异步】通讯技术;
AJAX不是全新的语言,是2005年Google公司推出的一种全新【编程模式】,不是新的编程语言。
2.AJAX开发步骤
步一:创建AJAX异步对象,例如:createAJAX()
步二:准备发送异步请求,例如:ajax.open(method,url)
步三:如果是POST请求的话,一定要设置AJAX请求头,例如:ajax.setRequestHeader(),如果是GET请求的话,无需设置设置AJAX请求头
步四:真正发送请求体中的数据到服务器,例如:ajax.send()
步五:AJAX不断的监听服务端响应的状态变化,例如:ajax.onreadystatechange,后面写一个无名处理函数
步六:在无名处理函数中,获取AJAX的数据后,按照DOM规则,用JS语言来操作Web页面
3.XMLHttpRequest(AJAX)对象常用事件,方法和属性
事件:
ajax.onreadystatechange:表示AJAX异步对象不断监听服务端的响应,是由服务器程序触发,不是程序员触发
属性:
ajax.readyState==0:表示AJAX异步对象已创建好,但还没有调用open()方法
ajax.readyState==1:表示AJAX异步对象已调用open()方法,但还没有调用send()方法
ajax.readyState==2:表示AJAX异步对象已调用send()方法,但请求还没有到达服务器端
ajax.readyState==3:表示服务端已接收到AJAX异步对象的请求,正在处理响应中。。。
ajax.readyState==【4】:表示AJAX异步对象已经完完全全接收到了服务器的响应信息,但接收到的数据不一定都正确
上述5种状态不是所有浏览器都相同,但状态4每种浏览器都相同
ajax.status==200:表示AJAX异步对象接收到响应码,如果是200的话,表示一切正常
ajax.responseText:表示从AJAX异步对象中获取HTML载体中的数据
ajax.responseXML:表示从AJAX异步对象中获取XML载体中的数据
方法:
ajax.open(method,url,可选的boolean值)
AJAX异步对象准备发送异步请求
参数一:以什么方式发送,常用的用GET或POST,大小写不敏感
参数二:发送到什么地方去,常用Servlet或Struts2或SpringMVC来接收,
参数三:默认值为true,表示AJAX对象以【异步】的方式提交到服务端
如果设置为false,表示AJAX对象以【同步】的方式提交到服务端
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")
表示将请求体中的内容,按照UTF-8的方式进行编码,只针对POST请求有效
ajax.send(content)
AJAX异步对象真正发送异步请求
参数一:表示HTTP【请求体】中的内容
如果是GET方式:content = null,如果强行传值到服务器,服务端收不到,返回NULL
如果是POST方式:content != null,例如:username=jack&password=123&role=admin
4.AJAX适合用在什么地方
AJAX【适合】不用来传递大量数据,而只用来【传递少量数据】,在用户的【体验】上,【更加人性化】。
AJAX是一个和服务器无关的技术,即服务器可使用:JavaEE,.NET,PHP……这些技术都可。
AJAX只管向服务器发送请求,同时只管接收服务器的HTML或XML或JSON载体响应。
服务端不能使用转发或重定向到web页面,因为这样会起浏览器全面刷新,即只能以流的方式响应给浏览器。
5.验证用户名是否存在
function createAJAX(){
var ajax=null;
try{
ajax = new ActiveXObject("microsoft.xmlhttp");
}
catch (e){
ajax = new XMLHttpRequest();
}
return ajax;
}
function checkEmpUsePost(emp){
var empName = emp.value;
var ajax = createAJAX();
var method = "POST";
var url = "${pageContext.request.contextPath}/emp_checkEmp?time="+new Date().getTime();
ajax.open(method,url);
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
var content = "empName="+empName; ajax.send(content);
ajax.onreadystatechange = function(){
if(ajax.readyState == 4)
{
if(ajax.status == 200)
{
var str = ajax.responseText;
var span = document.getElementById("resID");
var img = document.createElement("img");
// 设置src属性值
img.src = str;
img.style.width="12px";
img.style.height="12px";
//清空span标签的内容
span.innerHTML="";
span.appendChild(img);
}
}
}
}
Action中的方法:(Action中要有相应属性的参数set和get方法)
public String checkEmp() throws IOException {
Object empName = request.get("empName");
List<Employee> emps = employeeService.getAll((String) empName);
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter writer = response.getWriter();
if(emps != null && emps.size()>0)
{
writer.write("images/MsgSent.gif");
}
else {
writer.write("images/MsgError.gif");
}
writer.flush();
writer.close();
return null;
}
6.二级联动下拉框(xml方式)
function getCity(proEle){
var index = proEle.selectedIndex;
var province = proEle[index].innerHTML;
if("选择省份" != province)
{
var ajax = createAJAX();
var method = "POST";
var url = "${pageContext.request.contextPath}/ajax_getCity?time="+new Date().getTime();
ajax.open(method,url);
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
var content = "province="+province;
ajax.send(content);
ajax.onreadystatechange = function(){
if(ajax.readyState == 4){
if(ajax.status == 200)
{
//从ajax异步对象获取服务器响应的xml文档
var xmlDocument = ajax.responseXML;
// 解析xml文档
var citySel = document.getElementById("cityID");
var cityEleArray = xmlDocument.getElementsByTagName("city");
citySel.options.length=1;
for(var i=0;i<cityEleArray.length;i++){
//获取xml节点的内容
var city = cityEleArray[i].firstChild.nodeValue;
var cityEle = document.createElement("option");
cityEle.innerHTML = city;
citySel.appendChild(cityEle);
}
}
}
}
}
}
Action中的方法:
public String getCity() throws IOException {
Object province = request.get("province");
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/xml;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write("<?xml version='1.0' encoding='UTF-8'?>");
writer.write("<root>");
if("广东".equals(province))
{
writer.write("<city>广州</city>");
writer.write("<city>深圳</city>");
}
else if("山东".equals(province))
{
writer.write("<city>济南</city>");
writer.write("<city>枣庄</city>");
writer.write("<city>青岛</city>");
}
writer.write("</root>");
writer.flush();
writer.close();
return "getCity";
}
7.验证码
生成验证码:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
public Color getColor(){
Random random = new Random();
int r = random.nextInt(256);//0-255
int g = random.nextInt(256);
int b = random.nextInt(256);
return new Color(r,g,b);
}
public String getNum(){
String str = "";
Random random = new Random();
for(int i=0;i<4;i++){
str += random.nextInt(10);//0-9
}
return str;
}
%>
<%
response.setHeader("pragma", "mo-cache");
response.setHeader("cache-control", "no-cache");
response.setDateHeader("expires", 0); BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics();
g.setColor(new Color(200,200,200));
g.fillRect(0,0,80,30); for (int i = 0; i < 30; i++) {
Random random = new Random();
int x = random.nextInt(80);
int y = random.nextInt(30);
int xl = random.nextInt(x+10);
int yl = random.nextInt(y+10);
g.setColor(getColor());
g.drawLine(x, y, x + xl, y + yl);
} g.setFont(new Font("serif", Font.BOLD,16));
g.setColor(Color.BLACK);
String checkNum = getNum();//"2525" StringBuffer sb = new StringBuffer();
for(int i=0;i<checkNum.length();i++){
sb.append(checkNum.charAt(i)+" ");//"2 5 2 5"
}
g.drawString(sb.toString(),15,20); session.setAttribute("CHECKNUM",checkNum);//2525 ImageIO.write(image,"jpeg",response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
使用验证码:
<form>
<table>
<tr>
<th>验证码:</th>
<td><input type="text" id="checkcode" onkeyup="checkCode()"/> </td>
<td><img src="createCheckNum.jsp" width="80px" height="30px"></td>
<td id="resID"></td>
</tr>
</table>
</form>
验证:
function checkCode(){
var checkEle = document.getElementById("checkcode");
var checkcode = checkEle.value;
//去掉两边的空格
checkcode = trim(checkcode);
var td = document.getElementById("resID");
td.innerHTML="";
if(checkcode.length == 4){
var ajax = createAJAX();
//var method = "POST";
//var url = "${pageContext.request.contextPath}/ajax_checkCode?time="+new Date().getTime();
//ajax.open(method,url);
//ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
//var content = "checkcode="+checkcode;
//ajax.send(content);
var method = "POST";
var url = "${pageContext.request.contextPath}/ajax_checkCode?time="+new Date().getTime();
ajax.open(method,url);
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
var content = "checkcode="+checkcode;
ajax.send(content);
ajax.onreadystatechange = function(){
if(ajax.readyState == 4){
if(ajax.status == 200)
{
var tip = ajax.responseText;
var img = document.createElement("img");
img.src = tip;
img.style.width="14px";
img.style.height="14px";
td.appendChild(img);
}
}
}
}
}
function trim(str){
str = str.replace(/^\s*/,"");
str = str.replace(/\s*$/,"");
return str;
}
struts验证:
public String checkCode() throws IOException {
String tip="images/MsgError.gif";
Map<String, Object> session = ActionContext.getContext().getSession();
String checkcodeServer = (String) session.get("CHECKNUM");
if(checkcodeServer == null)
return null;
if(checkcodeServer.equals(checkcode))
{
tip="images/MsgSent.gif";
}
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write(tip);
writer.flush();
writer.close();
return null;
}
AJAX初步的更多相关文章
- Ajax初步理解
最近在项目中经常会使用Ajax技术,用法上倒是熟练了,但是只知其然,不知其所以然,抽时间读了读JavaScript高级程序设计中关于Ajax的介绍有了些初步的理解,在此总结一下. 什么是Ajax Aj ...
- [置顶] Ajax 初步学习总结
Ajax是什么 Ajax是(Asynchronous JavaScript And XML)是异步的JavaScript和xml.也就是异步请求更新技术.Ajax是一种对现有技术的一种新的应用,不是一 ...
- Ajax 初步学习总结
Ajax是什么 Ajax是(Asynchronous JavaScript And XML)是异步的JavaScript和xml.也就是异步请求更新技术.Ajax是一种对现有技术的一种新的应用,不是一 ...
- AJAX初步学习
AJAX(Asynchronous JavaScript and XML)即异步的JavaScript与XML技术,指的是一套综合了多项技术的浏览器端网页开发技术.其实就是为了解决传统页面同步刷新,消 ...
- django之choice、ajax初步
django之choice参数,ajax choice参数 应用场景:主要是用户性别.用户工作状态.成绩对应 ##在测试文件中运行,需要写以下几个模块 if __name__ == "__m ...
- Ajax初步实现页面局部内容更替
类似于QQ邮箱的那种局部页面跳转,单页应用常用到,目前很多网页都是这种,但是弊端就是一次加载过多资源,首次加载卡出翔啊
- 据说每个大牛、小牛都应该有自己的库——Ajax
蹉跎到今天终于要写Ajax部分了,平时工作中除了选择器我用jQuery的最多的就是ajax,所以这部分在自己的框架中必不可少. XMLHttpRequest 我以为对每个使用过Ajax的人来说XMLH ...
- 转:ASP.NET 使用Ajax
之前在Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的Sc ...
- (转)JAVA AJAX教程第三章—AJAX详细讲解
现在开始深入AJAX,这里还是按老思路,理论和实践相结合.这章的内容主要是讲解AJAX步骤详解,下一张将会用一个AJAX技术实现页面提示效果的实例来说明AJAX的实现. 一.AJAX步骤详解 AJAX ...
随机推荐
- iOS开发之 几本书
<object_c 编程之道书> <iOS 7 UI Transition Guide> iOS开发指南:从零基础到App Store上架[国内第一本iOS架构设计图书,涵盖i ...
- Java 默认/缺省 server 还是 client 模式
不多说,复制官方文档,适用于 Java 5 6 7 Architecture OS Default client VM if server-class, server VM; otherwise, c ...
- 如何连接git bash和git hub
git config --global user.name "Your Real Name" 2 git config --global user.email you@email. ...
- php正则:匹配(),{},[]小括号,大括号,中括号里面的内容
php正则:匹配(),{},[]小括号,大括号,中括号里面的内容 比如有一段字符: $s='60c8 {"code":"200","message&q ...
- RemoteWebDriver管理
直接贴代码: @Parameters({"BrowserType","NodeIP","NodePort"}) public void be ...
- JavaScript document
window -- document用于表现HTML页面当前窗体的内容 document,中文"文档" document是BOM中最重要对象之一 document对象是window ...
- input上传图片预览
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- alert与console.log
1.alert在页面中弹出 console.log是在控制台显示 例子 var aa="Silence"; alert(typeof(aa)); console.log(typeo ...
- android入门之: SharedPreferences
读取数据: 保存数据: +++++++++++++++++++方法详解++++++++++++++++++++++++++++++ SharedPreferences综述: 使用getSharedPr ...
- JavaScript访问修改css样式表
1.访问元素中style属性的css样式 可以根据属性的ID或name标签利用dom操作直接访问到内部的css样式,直接使用style对象访问 <div id="myid" ...