第四章 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>元素之外的 ...
随机推荐
- TP90 95 99指标
备忘下: 保证90%请求都能被响应的最小耗时 The tp90 is a minimum time under which 90% of requests have been served. tp90 ...
- 记录一次网站漏洞修复过程(三):第二轮处理(拦截SQL注入、跨站脚本攻击XSS)
在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法.在webForm 页面中开启校验 ...
- 查看 SELinux状态|关闭SELinux
查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...
- n皇后问题与2n皇后问题
n皇后问题 问题描述: 如何能够在 n×n 的棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后 (任两个皇后都不能处于同一条横行.纵行或斜线上) 结题思路: 可采用深度优先算法,将棋盘看成 ...
- 如何修改Jmeter配置使能支持更大并发
Jmeter做并发测试时,报错 java.lang.OutOfMemoryError:gc overhead limit exceeded. 原因是jmeter默认分配内存的参数很小,256M吧.故而 ...
- delphi 数组复制利用CopyMemory 最为完美
在各网站的文章里面,见复制数据的方法中,有move的,有system.copy的,而要实际应用中,这两种方法,并不是很完美,会遇到一些问题,比如copy在记录里面的复制时,编译都过不去,而CopyMe ...
- 笔记:Maven 项目目录结构
Maven提倡使用一个共同的标准目录结构,使开发人员能在熟悉了一个Maven工程后,对其他的Maven工程也能清晰了解.这样做也省去了很多设置的麻烦,以下的文档介绍是Maven希望的目录结构,并且也是 ...
- Python -- Records项目学习
Records学习笔记 Records链接地址 1. __getitem__(self, key) 内建方法(Build-in) 例子: class Test(object): def __getit ...
- 基于jquery的插件开发
最近在公司做一个项目,由于后台数据太多需要分页显示,在网上找了很多插件都没有找到合适的分页插件,所有的分页插件始终达不到自己想要的效果.由于这个项目也不是很赶,就在网上查找各种资料,自己写一个基于jq ...
- 爬虫(scrapy中的ImagesPipeline)
在使用ImagesPipeline对妹子图网站图片进行下载时,遇到302错误,页面被强制跳转. 解决办法如下: # -*- coding: utf-8 -*- # Define your item p ...