第四章 Ajax与jQuery
第四章 Ajax与jQuery
一、Ajax简介
在传统的Web应用中,每次请求服务器都会生成新的页面,用户在提交请求后,总是要等待服务器的响应。如果前一个请求没有响应,则后一个请求就不能发送,在等待期间新的页面没有生成,整个浏览器都是一片空白。对于用户而言,是一种不好的不连续的体验。
Ajax应用使用了JavaScript异步发送请求,不是每次请求都重新加载页面,发送请求时可以继续其他的操作,在服务器完成响应后,再使用JavaScript将响应展示给用户。
1. 什么是Ajax
Ajax(Asynchronous JavaScript and XML)并不是一种全新的技术,而是由JavaScript,XML,CSS等几种现有的技术整和而成。
Ajax的执行流程是: 用户界面触发事件调用JavaScript,通过Ajax引擎—XMLHttpRequest对象异步发送请求到服务器,服务器返回XML,JSON或HTML等格式的数据,然后利用返回的数据使用DOM和CSS技术更新用户界面。
2. 异步刷新的好处
1:之更新部分页面,有效利用宽带。
2:提供连续用户的体验。
3:提供类似C/S的交互效果,操作更方便。
3. 传统的Web开发和Ajax技术的区别
相同点:无论使用哪种开发技术,流程都是由客户端发送HTTP请求,然后由服务器对请求生成响应。
不同点:1.发送请求的方式不同。(传统的Web通过浏览器(form)发送请求,而Ajax则是通过JavaScript的XMLHttpRequest对象)
2.服务器响应不同。(传统的Web应用服务器响应一个完整的页面,而ajax服务器只响应需要的数据)
3.客户端处理的响应方式不同。(传统的Web应用发送请求后,浏览器将等待服务器响应完成后重新加载整个页面。Ajax不再空闲的等待响应,而是通过JavaScript动态更新页面中需要更新的部分)
二、XMLHttpRequest
XMLHttpRequest对象可以在不刷新当前页面的情况下向服务端发送异步请求,并接收服务端的响应结果,从而实现局部更新当前页面的功能。它可以接收JSON或HTML等格式的文件。
1. 创建XMLHttpRequset对象
语法:
老版本IE(IE5和IE6)
XMLHttpRequest = new ActiveXObject(“Microsoft.XMLHTTP”);
新版本IE和其他大部分浏览器
XMLHttpRequest = new XMLHttpRequest();
2. XMLHttpRequest对象常用的属性和方法
XMLHttpRequest的常用方法 |
|
方法名称 |
说明 |
Open(String method,String url,boolean async,String user,String password) |
用于创建一个新的HTTP请求 参数method:设置HTTP请求的方法,如POST、GET等,对大小写不敏感。 参数url:请求的URL地址。 参数async:可选,指定此请求是否为异步方法,默认为true。 参数user:可选,如果服务器需要验证,此处需要用户名,否则会弹出验证窗口。 参数password:可选,验证信息中的密码,如果用户名为空,此值将被忽略。 |
send(String data) |
发送请求到服务器。 参数data:字符串类型,通过此请求发送的数据。此参数值取决于open方法中的method参数。如果method为“POST”,可以指定该参数,如果method为“GET”,该参数值为null。 |
abort() |
取消当前的请求。 |
setRequestHeader(String header,String value) |
单独设置请求的某个HTTP头信息。 参数header:指定HTTP头名称。 参数value:指定头名称对应的值。 |
getResponseHeader(String header) |
从响应中获取指定的HTTP头信息。 参数header:获取指定HTTP 头。 |
getAllResponseHeaders() |
获取响应的所有HTTP头信息。 |
XMLHttpRequest常用的属性 |
|
属性名称 |
说明 |
onreadystatechange |
设置回调函数 |
readystate |
返回请求的当前状态。 0— 未初始化 1— 开始发送请求 2— 请求发送完成 3— 开始读取响应 4— 读取响应结束 |
ststus |
返回当前请求的HTTP状态码 200—正确返回 404—找暴怒到访问对象 500—服务器内部错误 403—没有访问权限 |
statusText |
返回当前请求的响应行状态 |
responseText |
以文本形式获取响应值 |
responseXML |
以XML形式获取响应值,并解析成DOM对象返回 |
三、使用Ajax发送GET请求和POST请求
下面两个示例分别展示使用ajax发送请求的JavaScript(js)代码。
1、示例一:发送GET请求
//1.创建XMLHttpRequest对象
if(window. XMLHttpRequest){ //返回为true时说明是最新版本的浏览器
xmlHttpRequest=new XMLHttpRequest();
}else{ //返回为false说明时旧版本的IE5或IE6浏览器
xmlHttpRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
}
//2.设置回调函数
xmlHttpRequest.onreadystatechange=callBack;//只有函数名即可,不带方法括号()
//3.初始化XMLHttpRequest组件
var url=”userServlet?name=”+name;//服务端URL地址,name为用户文本框javaScript获得的值。
xmlHttpRequest.open(“GET”,url,true);//创建一个请求
//4.发送请求
xmlHttpRequest.send(null);//”GET”请求方式参数为空
//回调函数callBack()处理服务器的响应
function callBack(){
if(xmlHttpRequest.readyState ==4 && xmlHttpRequest.status ==200){
var data=xmlHttpRequest.responseText;// 以文本形式获取响应值
if(data==”true”){ //data获取的数据类型包括String,int,boolean等基本数据类型,还有JSON;
$(“#show”).html(“用户名已经被使用!”);
}else{
$(“#show”).html(“用户名可以使用!”);
}
}
}
2、示例二:发送POST请求
//1.创建XMLHttpRequest对象
if(window. XMLHttpRequest){ //返回为true时说明是最新版本的浏览器
xmlHttpRequest=new XMLHttpRequest();
}else{ //返回为false说明时旧版本的IE5或IE6浏览器
xmlHttpRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
}
//2.设置回调函数
xmlHttpRequest.onreadystatechange=callBack;//只有函数名即可,不带方法括号()
//3.初始化XMLHttpRequest组件
var url=”userServlet”;//服务端URL地址,不带参数
xmlHttpRequest.open(“POST”,url,true);//创建一个请求
xmlHttpRequest.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);//指定header值
//4.发送请求
var data=”name=”+name;//需要发送的数据信息,name为用户文本框javaScript获得的值。多个值使用&符号连接
xmlHttpRequest.send(data);//”POST”请求方式带参数
//回调函数callBack()处理服务器的响应
function callBack(){
if(xmlHttpRequest.readyState ==4 && xmlHttpRequest.status ==200){
var data=xmlHttpRequest.responseText;// 以文本形式获取响应值
if(data==”true”){ //data获取的数据类型包括String,int,boolean等基本数据类型,还有JSON;
$(“#show”).html(“用户名已经被使用!”);
}else{
$(“#show”).html(“用户名可以使用!”);
}
}
}
四、使用jQuery实现Ajax
引言:前面介绍了如何使用原生态JavaScript实现Ajax技术,但是原生态实现Ajax相对 比较复杂,而且还要考虑浏览器的兼容性问题。
而jQuery将Ajax都进行了封装,只要简单的调用一个方法即可完成请求发送和复杂格式结果的解析。相比而言,使用jQuery实现Ajax更加简洁方便而且结构清晰。
1、$.ajax()方法
$.ajax()可以通过发送HTTP请求加载远程数据,是jQuery最底层的Ajax实现,具有较高的灵活性。
语法:$.ajax([settings]);
参数settings是$.ajax()方法的参数列表,用于配置ajax请求的键值对集合。
$.ajax()方法参数settings常用配置参数 |
||
参数 |
类型 |
说明 |
url |
String |
发送请求的地址,默认为当前地址 |
Type |
String |
请求方式(POST或GET,默认为GET),1.9.0之后的版本可以使用method代替type |
data |
PlainObject或 String或Array |
发送到服务器的数据 |
dataType |
String |
预期服务器返回的数据类型,可用类型有XML、HTML、Script、JSON、JSONP、TEXT。 |
beforeSend |
Function(jqXHR jqxhr,PlainObject settings) |
发送请求前调用的函数,可用于设置请求等,返回false将终止请求。 参数jaxhr:可选,jaxhr是XMLHttpRequest的超集 参数settings:可选,当前ajax()方法的settings对象 |
success |
Function(任意类型 result,String textStatus,jqXHR jqxhr) |
请求成功后调用的函数 参数result:可选,由服务器返回的数据 参数textStatus:可选,描叙请求状态的字符串 参数jqxhr:可选 |
error |
Function(jqXHR jqxhr,String textStatus,String errorThrown) |
请求失败时调用的函数 参数jqxhr:可选 参数textStatus:可选,错误的信息 参数errorThrown:可选,文本描叙的HTTP状态` |
complete |
Function(jqXHR jqxhr,String textStatus) |
请求完成后调用的函数(请求失败或成功均调用) 参数jqxhr:可选 参数textStatus:可选,描述请求状态的字符串 |
timeout |
Number |
设置请求超时时间 |
global |
Boolean |
默认为true,表示是否触发全局ajax事件 |
2、$.ajax()方法使用实例
1.导入jQuery的js文件
2.绑定事件
<td colspan="4"><input type="text" name="email" id="email" onblur="check();"/></td>
3.编写触发事件的js文件
function check(){
var email=$("#email").val();//获得文本框的值
if(email=="" || email==null){
alert("用户名不能为空!");
}else{
$.ajax({
"url":"Train1Servlet",
"type":"POST",//或"type":"GET",
"data":"email="+email,//发送的参数
"dataType":"text",//返回的数据类型
"success":callback,//请求成功后执行的函数
"error":function(){//请求错误后执行的函数
alert("系统错误!");
}
});
}
}
function callback(data){
if(data=="true"){
alert("用户名已被使用!");
}else{
alert("用户名可以使用!");
}
}
五、处理JSON格式的响应数据
引言:前面的ajax实现中,服务器响应内容是一些含义简单的文本,对于更多应用而言这是远远不够的。例如,电商网站中动态加载商品评论等复杂的文本,就需要用到一些结构化的数据表示方式,比如JSON。
1、JSON简介
JSON(JavaScript Object Nation)是一种轻量级的数据交互格式。
它是基于javaScript的一个子集,采用完全独立于语言的文本格式。
JSON类似于实体类对象,通常用来在客户端和服务器之间传递数据。
JSON的优点:
1、轻量级
2、结构简单
3、解析容易
2、定义JSON
定义JSON对象语法:var JSON对象={name:value,name:value…};
定义JSON数组语法:var JSON数组=[value,value,…];
示例:var person=[{“name”:”张胜男”,”age”:30},{“name”:”张胜”,”age”:39}];
3、展示JSON
$(document).ready(function() {
//1、定义JSON格式的user对象,并在div中输出
var user = {
"id" : 1,
"name" : "张三",
"pwd" : "000"
};
$("#objectDiv").append("ID:" + user.id + "<br>")
.append("用户名:" + user.name + "<br>")
.append("密码:" + user.pwd + "<br>");
//2、定义JSON格式的字符串数组,并在ul和select中输出
var ary = [ "中", "美", "俄" ];
var $ary = $(ary);//转换成jQuery对象
var $ul = $("#arrayUl"); // 展示数据的ul元素
var $sel = $("#arraySel"); // 展示数据的select元素
$ary.each(function() { $ul.append("<li>"+this+"</li>"); });
$ary.each(function(i) {
$sel.append("<option value='"+(i+1)+"'>"+this+"</option>");
});
//3、定义JSON格式的user对象数组,并使用<table>输出
var userArray = [ {
"id" : 2,
"name" : "admin",
"pwd" : "123"
}, {
"id" : 3,
"name" : "詹姆斯",
"pwd" : "11111"
}, {
"id" : 4,
"name" : "梅西",
"pwd" : "6666"
} ];
var $table = $("<table border='1'></table>").append(
"<tr><td>ID</td><td>用户名</td><td>密码</td></tr>");
$(userArray).each(function() {
$table.append("<tr><td>" + this.id + "</td><td>"
+ this.name + "</td><td>"
+ this.pwd + "</td></tr>");
});
$("#objectArrayDiv").append($table);
});
4、JSON的实际应用
1、servlet部分代码
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/htl;charset=UTF-8");
String email=req.getParameter("email");
StringBuffer used=new StringBuffer("{\"result\":");
if(email.equals("777@qq.com")) {
used.append("1");
}else {
used.append("0");
}
used.append("}");
PrintWriter out=resp.getWriter();
out.print(used);
out.flush();
out.close();
}
2、js事件代码
function check(){
var email=$("#email").val();
if(email=="" || email==null){
alert("用户名不能为空!");
}else{
$.ajax({
"url":"Train1Servlet3",
"type":"POST",//"type":"GET",
"data":"email="+email,
"dataType":"json",
"success":callback,
"error":function(){
alert("系统错误!");
}
});
}
}
function callback(data){
var i=data;//返回i = Object {result: 0}
var t=data.result;//返回 t = 0
if(data.result==1){//t==1
alert("用户名已被使用!");
}else{
alert("用户名可以使用!");
}
}
第四章 Ajax与jQuery的更多相关文章
- accp8.0转换教材第10章Ajax和jQuery理解与练习
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构. B/S(Browser/Server)结构即浏览器和服务器结构. 认识ajax .XMLHttpRequest.使用jqu ...
- (转)JAVA AJAX教程第四章—AJAX和MVC的简单结合
这里我们再理解了AJAX后,开始来用实例感受AJAX的力量. 今天我最后要实现的效果,当鼠标放到图片上时会根据,会把数据库库里的数据读出,通过显示框显示出来.这个在很多网上商店都有用到这里效果,我们这 ...
- 第四章 使用jQuery操作DOM
第四章 使用jQuery操作DOM 一.DOM操作 在jQuery中的DOM操作主要可分为样式操作.文本和value属性值操作.节点操作: 节点操作又包含属性操作.节点遍历和CSS-DOM操作. 其中 ...
- jQuery系列 第四章 jQuery框架的选择器
第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确 ...
- (李南江jQuery+Ajax)第一章:初识jQuery
第一章:初识jQuery 一.原生的JS与jQuery的区别 <!DOCTYPE html> <html lang="en"> <head> & ...
- JavaScript DOM编程艺术-学习笔记(第三章、第四章)
第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
目的 options绑定主要用于下拉列表中(即<select>元素)或多选列表(例如,<select size='6'>).此绑定不能与除<select>元素之外的 ...
随机推荐
- Spring任务调度定时器
1.在spring-context.xml配置 <!-- 计划任务配置,用 @Service @Lazy(false)标注类,用@Scheduled(cron = "0 0 2 * * ...
- c#多线程同步之Semaphore
一提到Semaphore(信号量)的使用,还挺有意思的,它允许多个线程同时访问多个稀有资源,我立马想到银行的ATM机取钱的场景.看下面的代码: ); public static void StartT ...
- Rotational Region CNN
R2CNN 论文Rotational Region CNN for Orientation Robust Scene Text Detection与RRPN(Arbitrary-Oriented Sc ...
- python数据类型:序列(字符串,元组,列表,字典)
序列通常有2个特点: 1,可以根据索引取值 2,可以切片操作 字符串,元组,列表,字典,都可以看做是序列类型 我的操作环境:Ubuntu16.04+python2.7 一.字符串类型 >按索引获 ...
- 关于LINUX里面查找,替换,编辑的一些用法
1.GREP查找(如果只是查找文件当中是否有该内容的话) grep -rn "hello,world!" * "hello,world!":表示要查找的字段 * ...
- openstack中的环境准备
openstack中环境准备基于Ubuntu系统 author:headsen chen 2017-10-13 11:51:50 个人原创,转载请注明作者,出处. 6 apt-get insta ...
- 关于在linux下安装git,以及在idea上将项目部署到码云上
GIT 基于对linux感兴趣,并且也考虑到以后从事开发后也会用到linux,着实在闲余之际学学linux.最近在用VM虚拟机环境下学做一个项目,在git上卡了一点时间,但同时也收获 了不少,下面写 ...
- Java集合详解及List源码分析
对于数组我们应该很熟悉,一个数组在内存中总是一块连续的存储空间,数组的创建使用new关键字,数组是引用类型的数据,一旦第一个元素的位置确定,那么后面的元素位置也就确定了,数组有一个最大的局限就是数组一 ...
- JVM学习一:JVM之类加载器概况
18年转眼就3月份都快结束了,也就是说一个季度就结束了:而我也因为年前笔记本坏了,今天刚修好了,那么也应该继续学习和博客之旅了.今年的博客之旅,从JVM开始学起,下面我们就言归正传,进入正题. 一.J ...
- Mycat 介绍
Mycat 是什么 Mycat是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL客户端工具和命 ...