第四章   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的更多相关文章

  1. accp8.0转换教材第10章Ajax和jQuery理解与练习

    C/S (Client/Server)结构,即大家熟知的客户机和服务器结构. B/S(Browser/Server)结构即浏览器和服务器结构. 认识ajax .XMLHttpRequest.使用jqu ...

  2. (转)JAVA AJAX教程第四章—AJAX和MVC的简单结合

    这里我们再理解了AJAX后,开始来用实例感受AJAX的力量. 今天我最后要实现的效果,当鼠标放到图片上时会根据,会把数据库库里的数据读出,通过显示框显示出来.这个在很多网上商店都有用到这里效果,我们这 ...

  3. 第四章 使用jQuery操作DOM

    第四章 使用jQuery操作DOM 一.DOM操作 在jQuery中的DOM操作主要可分为样式操作.文本和value属性值操作.节点操作: 节点操作又包含属性操作.节点遍历和CSS-DOM操作. 其中 ...

  4. jQuery系列 第四章 jQuery框架的选择器

    第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确 ...

  5. (李南江jQuery+Ajax)第一章:初识jQuery

    第一章:初识jQuery 一.原生的JS与jQuery的区别 <!DOCTYPE html> <html lang="en"> <head> & ...

  6. JavaScript DOM编程艺术-学习笔记(第三章、第四章)

    第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  9. KnockoutJS 3.X API 第四章 表单绑定(11) options绑定

    目的 options绑定主要用于下拉列表中(即<select>元素)或多选列表(例如,<select size='6'>).此绑定不能与除<select>元素之外的 ...

随机推荐

  1. Spring任务调度定时器

    1.在spring-context.xml配置 <!-- 计划任务配置,用 @Service @Lazy(false)标注类,用@Scheduled(cron = "0 0 2 * * ...

  2. c#多线程同步之Semaphore

    一提到Semaphore(信号量)的使用,还挺有意思的,它允许多个线程同时访问多个稀有资源,我立马想到银行的ATM机取钱的场景.看下面的代码: ); public static void StartT ...

  3. Rotational Region CNN

    R2CNN 论文Rotational Region CNN for Orientation Robust Scene Text Detection与RRPN(Arbitrary-Oriented Sc ...

  4. python数据类型:序列(字符串,元组,列表,字典)

    序列通常有2个特点: 1,可以根据索引取值 2,可以切片操作 字符串,元组,列表,字典,都可以看做是序列类型 我的操作环境:Ubuntu16.04+python2.7 一.字符串类型 >按索引获 ...

  5. 关于LINUX里面查找,替换,编辑的一些用法

    1.GREP查找(如果只是查找文件当中是否有该内容的话) grep -rn "hello,world!" * "hello,world!":表示要查找的字段 * ...

  6. openstack中的环境准备

    openstack中环境准备基于Ubuntu系统 author:headsen chen   2017-10-13  11:51:50 个人原创,转载请注明作者,出处. 6 apt-get insta ...

  7. 关于在linux下安装git,以及在idea上将项目部署到码云上

    GIT 基于对linux感兴趣,并且也考虑到以后从事开发后也会用到linux,着实在闲余之际学学linux.最近在用VM虚拟机环境下学做一个项目,在git上卡了一点时间,但同时也收获  了不少,下面写 ...

  8. Java集合详解及List源码分析

    对于数组我们应该很熟悉,一个数组在内存中总是一块连续的存储空间,数组的创建使用new关键字,数组是引用类型的数据,一旦第一个元素的位置确定,那么后面的元素位置也就确定了,数组有一个最大的局限就是数组一 ...

  9. JVM学习一:JVM之类加载器概况

    18年转眼就3月份都快结束了,也就是说一个季度就结束了:而我也因为年前笔记本坏了,今天刚修好了,那么也应该继续学习和博客之旅了.今年的博客之旅,从JVM开始学起,下面我们就言归正传,进入正题. 一.J ...

  10. Mycat 介绍

    Mycat 是什么 Mycat是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL客户端工具和命 ...