jquery中ajax学习笔记一


Posted in Javascript onOctober 16, 2011

AJAX简单介绍:
AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),是指一种创建交互式网页应用的网页开发技术。通过 AJAX,JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。通过这个对象,您JavaScript 可在不重载页面的情况与 Web 服务器交换数据。
jQuery是一种javascript框架,是对javascript的一种轻量级的封装,容易理解。
Ajax是一种由xml+javascript组合起来的一种异步请求技术.可实现动态刷新。
ajax准备工作:
1.jquery下载:
官网最新的下载地址:http://blog.jquery.com/2011/09/01/jquery-1-6-3-released/
下载时选中jQuery 1.6.3 Minified或jQuery 1.6.3 Uncompressed右键单击选择“使用迅雷下载”
2.主要知识介绍
2.1.ajax异步传输的步骤:
1.采用dom的方式获取文本框中属性的值
document.getElementById("id名称").value
2.创建XMLHttpRequest对象
根据浏览器的不同有XMLHttpRequest、ActiveXObject两种对象
3.注册回调函数 注册回调函数时,只需要函数名,不要加括号
注册回调函数时会获取服务器端返回的数据:
第一种方式:获取服务器端输出的纯文本数据
第二种方式:使用responseXML的方式来接受XML数据对象的DOM对象
4.设置连接信息
5.发送数据,开始和服务器端进行交互
post方式/get方式

2.2.ajax主要方法:
(1).getElementById(“id属性值”):
根据指定的 id 属性值得到对象
(2).getElementsByTagName(tagname):
通过查找整个 HTML 文档中的任何 HTML 元素,传回指定名称的元素集合
(3).选择器:
选择器有基本选择器、层级选择器、属性选择器等。本程序只有到基本选择器#id,如:
$("#myDiv"):查找 ID 为"myDiv"的元素
2.3.XMLHttpRequest对象:
XMLHttpRequest可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在后台向客户端发送数据。
2.3.1.方法:
(1)overrideMimeType(“text/html”):
将覆盖发送给服务器的头部,强制text/xml 作为mime-type
(2)open(method, url, async, username, password):
初始化 HTTP 请求参数,例如 URL 和 HTTP 方法,但是并不发送请求。
method参数是用于请求的HTTP方法,包括GET、POST和HEAD;
url参数是请求的主体
async参数指示请求使用同步还是异步,false请求是同步的,true请求是异步的
username 和 password 参数是可选的,为 url 所需的授权提供认证资格。如果指定了,它们会覆盖 url 自己指定的任何资格。
(3)send(body):
发送 HTTP 请求,使用传递给 open() 方法的参数,以及传递给该方法的可选请求体
send(body)如果通过调用 open() 指定的 HTTP 方法是 POST 或 PUT,body 参数指定了请求体,作为一个字符串或者 Document 对象。如果请求体不是必须的话,这个参数就为 null。
如果之前调用的 open() 参数 async 为 false,这个方法会阻塞并不会返回,直到 readyState 为 4 并且服务器的响应被完全接收。
如果 async 参数为 true,或者这个参数省略了,send() 立即返回,并且正如后面所介绍的,服务器响应将在一个后台线程中处理
(4)setRequestHeader(name, value):
向一个打开但未发送的请求设置或添加一个 HTTP 请求
name 参数是要设置的头部的名称。这个参数不应该包括空白、冒号或换行。
value 参数是头部的值。这个参数不应该包括换行
2.3.2.属性:
(1)onreadystatechange:
每次 readyState 属性改变的时候调用的事件句柄函数。当 readyState 为 3 时,它也可能调用多次。
(2)readyState:
HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,这个属性的值从 0 开始,直到接收到完整的 HTTP 响应,这个值增加到 4。
5 个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:

readyState 的值不会递减,除非当一个请求在处理过程中的时候调用了 abort() 或 open() 方法。每次这个属性的值增加的时候,都会触发 onreadystatechange 事件句柄。
(3)status:
由服务器返回的 HTTP 状态代码,如200表示成功,而404表示 "Not Found" 错误。 当readyState小于3的时候读取这一属性会导致一个异常。
(4)responseText:
目前为止从服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。
如果 readyState 小于 3,这个属性就是一个空字符串。当 readyState 为 3,这个属性返回目前已经接收的响应部分。如果 readyState 为 4,这个属性保存了完整的响应体。
如果响应包含了为响应体指定字符编码的头部,就使用该编码。否则,假定使用 Unicode UTF-8
(5)responseXML:对请求的响应,解析为XML并作为Document对象返回

代码示例:
说明:本示例有前台和后台组成,后台采用的是servlet实现,只是没有去数据库校验数据。前台有html和javascript组成,前台验证采用了两种方式,一是采用jquery封装的ajax来实现表单动态验证,二是采用XMLHttpRequest对象来实现表单动态验证,两种验证方式的不同只是javascript脚本不一样,前台页面和后台的servlet都一样。

前台ajax.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>ajax</title> 
<!--导入js,注意src的路径--> 
<script type="text/javascript" src="jslib/jquery.js"></script> 
<script type="text/javascript" src="jslib/verify.js"></script> 
</head> 
<body> 
<!-- ajax不需要表单进行数据提交,因此不用写表单标签--> 
<!-- ajax不需要name属性,需要一个id的属性--> 
<!--onblur 事件会在对象失去焦点时发生--> 
用户名:<input type="text" id="username" onblur="verify3()"/><div id="result"></div> 
</br></br> 
<input type="submit" value="登录" onclick="login()"/> 
</body> 
</html>

后台AJAXServer.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; 
public class AJAXServer extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
response.setContentType("text/html;charset=utf-8"); 
PrintWriter out=response.getWriter(); 
//1.取参数 
String old=request.getParameter("name"); 
//2.检查是否有问题 
if(old==null||old.length()==0){ 
out.println("用户名不能为空"); 
}else{ 
//3.校验操作 
String name=old; 
if(name.equals("pan")){ 
//4.和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面端,而不是到新的页面 
out.println("用户名["+name+"]已经存在"); 
}else{ 
out.println("用户名["+name+"]可以使用"); 
} 
} 
} 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
this.doGet(request,response); 
} 
}

javascript:verify.js
<!--(1)用户名称的校验,采用jquery封装的ajax动态校验表单数据--> 
function verify1(){ 
//1.获取文本框中的内容 
//document.getElementById("username"); 
var jqueryObj= $("#username"); 
//获取节点的值 
var userName=jqueryObj.val(); 
//2.将文本框中的数据发送给服务器的servlet 
$.get("AJAXServer?name=" +username,null,callback); 
} 
function callback(data){ 
//3.接收服务器返回的数据 
//4.把服务器端返回的数据动态的显示在页面上 
//找到保存信息的节点 
var resultObj=$("#result"); 
resultObj.html(data); 
} 
//验证方法2是把验证方式1写在了一个方法中,效果是一样的,都是采用jquery封装的ajax动态校验表单数据 
function verify2(){ 
$.get("AJAXServer?name="+$("#username").val(),null,function(data){ 
$("#result").html(data); 
}); 
} 
<!--(2)用户名称的校验,使用XMLHTTPRequest对象来进行ajax的异步数据验证--> 
var xmlhttp;//定义一个全局变量 
function verify3(){ 
//1.采用dom的方式获取文本框中属性的值 
var username=document.getElementById("username").value; 
//2.创建XMLHttpRequest对象 
//需要针对IE和其他类型的浏览器的差异建立这个对象的不同方式写不同的代码 
if(window.XMLHttpRequest){ 
//针对FireFox,IE7,IE8,Safari,Opera,Mozillar 
xmlhttp=new XMLHttpRequest(); 
//针对某些特定的版本的mozillar浏览器的BUG进行修正 
if(xmlhttp.overrideMimeType){ 
xmlhttp.overrideMimeType("text/html"); 
} 
} else if(window.ActiveXObject){ 
//针对IE6,IE5.5,IE5 
//两个用于可以创建XMLHttpRequest对象的控件名称,保存在一个js数组中,排在前面的版本较新 
var activexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; 
for(var i=0;i<activexName.length;i++){ 
// 取出一个控件名称进行创建,如果创建成功就终止循环 
//如果创建失败,会抛出异常,然后可以继续循环,继续尝试创建 
try{ 
xmlhttp=new ActiveXObject(activexName[i]); 
break; 
}catch(e){ 
} 
} 
} 
if(!xmlhttp){ 
alert("XMLHttpRequest对象创建失败!!"); 
return; 
} 
//3.注册回调函数 注册回调函数时,只需要函数名,不要加括号 
//我们需要将函数名注册,如果加上括号,就会把函数的返回值注册上,这个是错误的 
xmlhttp.onreadystatechange=callback3; 
//4.设置连接信息 
xmlhttp.open("GET","AJAXServer?name="+username,true); 
//5.发送数据,开始和服务器端进行交互 
xmlhttp.send(null);//GET方式url中封装了用户名,故发送只用发一个null 
//POST方式请求和发送数据 
<!-- 
xmlhttp.open("POST","AJAXServer",true); 
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
xmlhttp.send("name="+username); 
--> 
} 
//回调函数 
function callback3(){ 
//判断对象的状态是否交互完成 
if(xmlhttp.readyState==4){ 
//判断http的交互是否成功 
if(xmlhttp.status==200) { 
//获取服务器端返回的数据 
//第一种方式:获取服务器端输出的纯文本数据 
var responseText=xmlhttp.responseText; 
//将数据显示在页面上 通过dom的方式找到div标签对应的元素节点 
var divNode=document.getElementById("result"); 
//设置元素节点中的html的内容 
divNode.innerHTML=responseText; 
} 
} 
}

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>AJAXServer</servlet-name> 
<servlet-class>AJAXServer</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>AJAXServer</servlet-name> 
<url-pattern>/AJAXServer</url-pattern> 
</servlet-mapping> 
</web-app>

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>AJAXServer</servlet-name> 
<servlet-class>AJAXServer</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>AJAXServer</servlet-name> 
<url-pattern>/AJAXServer</url-pattern> 
</servlet-mapping> 
</web-app>

1.web.xml servlet的配置

2.AJAXServer.java 包名相关

截图1:

 jquery中ajax学习笔记一

截图2:

jquery中ajax学习笔记一

截图3:

jquery中ajax学习笔记一

截图4:

jquery中ajax学习笔记一

截图说明:以上四个截图url显示的都是一样的,只是为了便于显示我没有把它截下来。

Javascript 相关文章推荐
jQuery中filter(),not(),split()使用方法
Jul 06 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
Javascript中的Array数组对象详谈
Mar 03 Javascript
举例详解JavaScript中Promise的使用
Jun 24 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
Oct 16 Javascript
JS鼠标拖拽实例分析
Nov 23 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
分享19个JavaScript 有用的简写写法
Jul 07 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 #Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
Oct 14 #Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
Oct 13 #Javascript
获取body标签的两种方法
Oct 13 #Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 #Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
Oct 13 #Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 #Javascript
You might like
PHP的简易冒泡法代码分享
2012/08/28 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
js模糊查询实例分享
2016/12/26 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
vue实现图书管理demo详解
2017/10/17 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python os模块学习笔记
2015/06/21 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Python如何读写CSV文件
2020/08/13 Python
python request 模块详细介绍
2020/11/10 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
大整数数相乘的问题
2012/07/22 面试题
法人代表委托书
2014/04/04 职场文书
工商管理专业自荐信
2014/06/03 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript