第四章   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. jQuery中append appendTo prepend prependTo insertBefore insertAfter after before之间的区别

    jQuery中有一个很关键的元素操作,他们的使用方法都一样,但是呈现的结果有所不同. <!DOCTYPE html> <html lang="en"> &l ...

  2. centos下 kerberos安装手册

    (一)yum方式安装 安装krb的server 步骤一:yum install krb5-server 安装krb 的客户端yum install krb5-workstation krb5-libs ...

  3. link 标签

    link标签 主要是引用外部文件 rel属性 规定当前文档与被链接文档之间的关系 alternate,author,help,icon,licence,next,pingback,prefetch,p ...

  4. PDB调试python代码常用命令

    常用命令 where(w) 找出当前代码运行位置 list(l) 显示当前代码的部分上下文 list n(line number) 显示指定行的上下文 list m, n(line number) 显 ...

  5. PAT乙级-1042. 字符统计(20)

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...

  6. selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!

    selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!

  7. Hibernate 一对一关联映射,mappedBy参数解析

    在最近java,SSH框架的学习中遇到了这样的一个问题,在Hibernate的开发中一对一关联映射的单向关联,主表会在次表新增一列次表的主键如下图,但是在双向关联中次表不会在表中创建主表的主键一列,这 ...

  8. GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题

    全球互联网技术在飞速发展的同时,网络安全事件也随之频发.除了直接带来经济损失的网络恶意攻击之外,企业在多个方面也遭受着不同程度的网络恶意攻击,包括品牌形象.管理时间.企业竞争力.客户成交量.用户行为等 ...

  9. 使用nodegrass简单封装http请求例子

    1.项目中经常性的使用http发送请求处理数据.而大部分请求方式为get和post,于是对http请求进行封装,提供代码的利用率. 2.nodegress是nodejs的一个请求工具. 具体步骤及代码 ...

  10. 基于TODO的开发方法

    之前买了一本书,叫<架构探险-从零开始写Java Web框架 >(不推荐购买-),一本标题党书籍!但是我很推崇作者写代码的方式,就是基于TODO的方式进行开发! 个人认为以基于TODO的方 ...