第6章 jQuery与Ajax的应用
6.1 Ajax的优势和不足
6.1.1 Ajax的优势
- 1.不需要插件支持
- 2.优秀的用户体验
- 3.提高Web程序的性能
Ajax模式只是通过XMLHttpRequest对象向服务器端提交希望提交的数据,即按需发送。 - 4.减轻服务器和带宽的负担
Ajax的工作原理相当于在用户和服务器之间加了一个中间层,使用户操作与服务器响应异步化。它在客户端创建Ajax引擎,把传统方式下的一些服务器负担的工作转移到客户端,便于客户端资源来处理,减轻服务器和带宽的负担。
6.1.2 Ajax的不足
- 1.浏览器对XMLHttpRequest对象的支持度不足
- 2.破坏浏览器前进、“后退”按钮的正常功能
- 3.对搜索引擎的支持的不足
- 4.开发和调试工具的缺乏
6.2 Ajax的XMLHttpRequest对象
Ajax的核心是xMLHttpRequest对象,它是Ajax实现的关键—发送异步请求、接收响
应及执行回调都是通过它来完成的。
6.4编写第1个Ajax例子
在正式接触jQuery的Ajax操作之前,先看一个用传统的JavaScript实现的Ajax例子。
点击按钮,返回字符串:
(1)定义一个函数,通过该函数来异步获取信息,代码如下:
(2)声明一个空对象用来装入XMLHttpRequest对象,代码如下:
(3)给XMLHttpRequest对象赋值,代码如下:
IE5, IE 6是以ActiveXObject的方式引入XMLHttpRequest对象的,而其他浏览器的XMLHtttRequest对象是window的子对象。
(4)实例化成功后,使用open()方法初始化}CMLHttpRequest对象,指定HTTP方法和要使用的服务器URL,代码如下:
(5)因为要做一个异步调用,所以需要注册一个XMLHttpRequest对象将调用的回调事件处理器当它的readyState值改变时调用。当readyState值被改变时,会激发一个readystatechange事件,可以使用onreadystatechange属性来注册该回调事件处理器,代码如下:
在处理该响应之前,事件处理器应该一首先检查readyState的值和HTTP状态。当请求完成加载(readyState值为4)并且响应已经成功(HTTP状态值为200)时,就可以调用一个JavaScript函数来处理该响应内容,代码如下:
6.5 jQuery中的Ajax
jQuery对Ajax操作进行了封装,在jQuery中$.ajax()
方法属于最底层的方法,第2层是 load()
、$.get()
和$.post()
方法,第3层是$.getScript()
和$.getJSON()
方法。首先介绍第2层的方法,因为其使用频率很高。
6.5.1 load()方法
1.载入HTML文档
例如:
test.html页面的HTML内容就会被加载并插入主页面`的元素中。
2.筛选载入的HTML文档
如果只需要加载test.html页而内的某些元素,那么可以使用load()方法的URL参数来达到目的。
load)方法的URL参数的语法结构为 “urt selector”。注意,URL和选择器之间有一个空格。例如只需要加载test.html页面中class为“para”的内容,以使用如下代码来完成:
3.传递方式
load()方法的传递方式根据参数data来自动指定。如果没有参数传递,则采用GET方式传递;
反之,则会自动转换为POST方式。
4.回调参数
对于必须在加载完成后才能继续的操作,load()方法提供了回调函数( callback ),该函数有3个参数,分别代表请求返问的内容、请求状态和XMLHttpRequest对象,jQuery代码如下:
6.5.2 $.get()
方法和$.post()
方法
1.
$.get()
方法
$.get()
方法使用GET方式来进行异步请求。
它的结构为:
2.$.post()方法
它与$.get()
方法的结构和使Il]方式都相同,不过它们之间仍然有以下区别。
GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器。当然,在Ajax请求中,这种区别对用户是不可见的。
GET方式对传输的数据有大小限制(通常不能大于2KB ),而使用POST方式传递的数据量要比GET方式大得多(理论上不受限制)。
GET方式请求的数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据,例如账号和密码等。在某种情况下,GET方式会带来严重的安全性问题,而POST方式相对来说就可以避免这些问题。
GET方式和POST方式传递的数据在服务器端的获取也不相同。在PHP中,GET方式的数据可以用$_GET[]
获取,而POST方式可以$_POST[]
获取。两种方式都可以用$_REQUEST[]
来获取。
6.5.3 $.getScript()
方法和 $.getJSON()
方法
- 1.
$.getScript()
方法
有时候,在页面初次加载时就取得所需的全部JavaScript文件是完全没有必要的。虽然可以在需要哪个JavaScript文件时,动态地创建<script>
标签,jQuery代码如下:
等同于:
但这种方式并不理想。为此,jQuery提供了$.getScript()方法来直接加载.js文件:
$.getJSON()
方法
$.getJSON()
方法用于加载JSON文件,与$.getScript()
方法的用法相同。
以下例子加载JSON文件,并在回调函数中处理返回的数据:
jQuery提供了一个通用的遍历方法 $.each()
以用于遍历对象和数组。
$.each()
函数不同于jQuery对象的each()方法,它是一个全局函数,不操作jQuery对象,而是以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。回调函数拥有两个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容。代码如下:
不仅如此,还能通过使用JSONP形式的回调函数来加载其他网站的JSON数据.
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过JavaScript Callback的形式实现跨域访问。由于JSON只是一种含有简单括号结构的纯文本,因此许多通道都可以交换JSON消息。而由于同源策略的限制,开发人员不能在与外部服务器进行通信的时候使用XMLHttpRequest。而JSONP是一种可以绕过同源策略的方法,即通过使用JSON与<script>
标记相结合的方法,从服务器端直接返回可执行的JavaScript函数调用或者JavaScript对象。目前JSONP已经成为各大公司的Web应用程序跨域首选,例如Youtube GData, Google Social Graph, Digg、豆瓣、Del.icio.us等.
6.5.4 $.ajax()
方法
$.ajax()
方法是jQuery最底层的Ajax实现。
它的结构为:
该方法只有1个参数,但在这个对象里包含了$.ajax()
方法所需要的请求设置以及回调函数等信息,参数以key/value的形式存在,所有参数都是可选的,常用参数如表6-3所示。
前面用到的$.load()
, $.get()
, $.post()
, $.getScript()
和$.getJSON()
这些方法,都是基于$.ajax()
方法构建的,$.ajax()
方法是jQuert最底层的Ajax实现,因此可以用它来代替前面的所有方法。
6.6 序列化元素
- 1.serialize()方法
为了获取姓名和内容,必须将字段的值逐个添加到data参数中。代码如下;
这种方式在只有少量字段的表单中,勉强还可以使用,但如果表单元素越来越复杂,使用这种方式在增大工作一鼠的同时也使表单缺乏弹性。jQuery为这一常用的操作提供了简化的方法——serialize()。与jQuery中其他方法一样,serialize()方法也是作用于一个jQuery对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求。
2.serializeArray()方法
在jQuery中还有一个与serialize()类似的方法一serializeArray(),该方法不是返回字符串,而是将DOM元素序列化后,返回JOSN格式的数据。jQuery代码如下:
$.param()
方法
它是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化。
比如将一个普通的对象序列化:
6.7 jQuery中的Ajax全局事件
通过jQuery提供了一些自定义全局函数,能够为各种与Ajax相关的事件注册回调函数。例如当Ajax请求开始时,会触发ajaxStart()方法的回调函数; 当Ajax请求结束时,会触发ajaxStop{)方法的回调函数。这些方法都是全局的方法,因此无论创建它们的代码位于何处,只要有Ajax请求发生时,就会触发它们。
如需要为网页添加一个提示信息,常用的提示信息是“加载中…”,代码如下:
Note:
如果想使某个Ajax请求不受全局方法的影响,那么可以在使用$.ajax(options)
方法时,将参数中的global设置为false, jQuery代码如下:
第6章 jQuery与Ajax的应用的更多相关文章
- 第六章 jQuery和ajax应用
ajax是异步JavaScript和xml的简称. 一. ajax补白 优势 不足(不一定是不足) 不需要任何插件(但需要浏览器支持js) XMLHttpRequest对象在不同浏览器下有差异 优秀的 ...
- jQuery 第六章 jQuery在Ajax应用
1.本章目标 ajax 2.ajax 异步刷新技术,我们的网页不需要全部刷新,按需实现局部刷新,上线后台的交互 用户体验好 地图,前台验证,表单提交,修改,查询等等 原生的js和ajax packag ...
- 锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用
1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpR ...
- 三、jQuery--jQuery基础--jQuery基础课程--第8章 jQuery 实现Ajax应用
1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:load(url,[data],[callback]) ...
- jQuery与Ajax的应用——《锋利的jQuery》(第2版)读书笔记3
第6章 jQuery与Ajax的应用 jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是load().$.get()和$.post()方法,第3层是$ ...
- 《锋利的JQuery》读书要点笔记5——jQuery与Ajax的应用
第6章 jQuery与Ajax的应用 Ajax的全称:Asynchronous JavaScript and XML (异步Javascript和XML) 传统模式中,数据提交通过表单方式实现,数据的 ...
- Jquery书写ajax
根据API学习本章 Jquery书写ajax 使用ajax发送表单到servlet,发送时显示等待图片,servlet处理完返回信息,在页面显示返回信息,并且隐藏等待图片 <%@ page la ...
- 第十六章:Python の Web开发基础(三) jQuery与Ajax
本課主題 jQuery 介绍 Ajax 介绍 jQuery 介绍 选择器 jQuery 的选择器分不同的种类,主要目的是用来查找目标的 HTML 标签,方便对目标标签进行操作,比如找到 <li& ...
- 第7章 jQuery插件的使用和写法
第7章 jQuery插件的使用和写法 插件又称扩展,是一种遵循一定规范的应用程序接口写出来的程序. 插件的编写思想基于面向对象. 获取最新的插件可以查看jquery官网:http://plugins. ...
随机推荐
- swing之JDialog
package canying; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java ...
- C++中rand()函数的用法
1.rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 2.如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = r ...
- Oracle job procedure 存储过程定时任务(转自hoojo)
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...
- 使用自定义端口连接SQL Server 2008的方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 使用过SQL Server的人大多都知道,SQL Server服务器默认监听的端口号是1433,但是我今天遇到的问题是我的机器上有三个数据库实例, ...
- Linq使用小记之Group By
private void cmbStore_SelectedIndexChanged(object sender, EventArgs e) { DataTable vDt = ParamClass. ...
- 【转】 Pro Android学习笔记(八七):了解Handler(1):组件和线程
目录(?)[-] 主线程消息队列和线程池 查看线程信息 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingf ...
- MYSQL BENCHMARK()函数
MySQL有一个内置的BENCHMARK()函数,可以测试某些特定操作的执行速度. BENCHMARK(count,expr) BENCHMARK会重复计算expr表达式count次,通过这种方式就可 ...
- Redis事务和watch
redis的事务 严格意义来讲,redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的. redis中的事务定义 Redis中的事务(transaction)是一组命令的集合. 事务同 ...
- Py修行路 Matplotlib 绘图及可视化模块
Matplotlib是一个强大的Python绘图和数据可视化的工具包. 安装方法:pip install matplotlib 引用方法:import matplotlib.pyplot as plt ...
- 正则表达式 notes
nfs 网络文件系统 存储类型:块存储,对象存储,文件存储 nfs属于文件存储 crond 分钟小时日月周 命令:绝对路径 命令是由crond解释 /bin/bash a.sh */2 * * * * ...