第四章   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. TP90 95 99指标

    备忘下: 保证90%请求都能被响应的最小耗时 The tp90 is a minimum time under which 90% of requests have been served. tp90 ...

  2. 记录一次网站漏洞修复过程(三):第二轮处理(拦截SQL注入、跨站脚本攻击XSS)

    在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法.在webForm 页面中开启校验 ...

  3. 查看 SELinux状态|关闭SELinux

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  4. n皇后问题与2n皇后问题

    n皇后问题 问题描述: 如何能够在 n×n 的棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后 (任两个皇后都不能处于同一条横行.纵行或斜线上) 结题思路: 可采用深度优先算法,将棋盘看成 ...

  5. 如何修改Jmeter配置使能支持更大并发

    Jmeter做并发测试时,报错 java.lang.OutOfMemoryError:gc overhead limit exceeded. 原因是jmeter默认分配内存的参数很小,256M吧.故而 ...

  6. delphi 数组复制利用CopyMemory 最为完美

    在各网站的文章里面,见复制数据的方法中,有move的,有system.copy的,而要实际应用中,这两种方法,并不是很完美,会遇到一些问题,比如copy在记录里面的复制时,编译都过不去,而CopyMe ...

  7. 笔记:Maven 项目目录结构

    Maven提倡使用一个共同的标准目录结构,使开发人员能在熟悉了一个Maven工程后,对其他的Maven工程也能清晰了解.这样做也省去了很多设置的麻烦,以下的文档介绍是Maven希望的目录结构,并且也是 ...

  8. Python -- Records项目学习

    Records学习笔记 Records链接地址 1. __getitem__(self, key) 内建方法(Build-in) 例子: class Test(object): def __getit ...

  9. 基于jquery的插件开发

    最近在公司做一个项目,由于后台数据太多需要分页显示,在网上找了很多插件都没有找到合适的分页插件,所有的分页插件始终达不到自己想要的效果.由于这个项目也不是很赶,就在网上查找各种资料,自己写一个基于jq ...

  10. 爬虫(scrapy中的ImagesPipeline)

    在使用ImagesPipeline对妹子图网站图片进行下载时,遇到302错误,页面被强制跳转. 解决办法如下: # -*- coding: utf-8 -*- # Define your item p ...