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. ...
随机推荐
-
Java中替换HTML标签的方法代码
这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...
-
IE11下ASP.NET Forms身份认证无法保存Cookie的问题
IE11下ASP.NET Forms身份认证无法保存Cookie的问题 折腾了三四天,今天才找到资料,解决了. 以下会转贴,还没来得及深究,先放着,有空再学习下. ASP.NET中使用Forms身份认 ...
-
jquery.ajax提交多值(数组)
偶尔会遇到类似复选框的一个属性存在多值情况,若使用ajax提交的化,设置data :{ids:[1,2,3,4]} 提交后,后台无法使用ids获取到数据. 这里可以用到ajax的 traditiona ...
-
Mysql服务启动问题
mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) u ...
-
使用PageHeap.EXE或GFlags.EXE检查内存越界错误
必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ------------------------ ...
-
.net之简单工厂模式
//抽象一个生产笔的方法 namespace simpleFactory{ public abstract class AbstractPen { public abstract void creat ...
-
JS INPUT输入的时候全角自动转为半角
function CtoH(obj){var str=obj.value;var result="";for (var i = 0; i < str.length; i++) ...
-
pythonのsimple_tag
当我们需要在页面种直接调用py文件中的某些方法时,我们就要用到simple_tag.具体步骤如下: 1.在某个app下创建templatetags文件夹,切记该名称是不可以改变的. 2.在该文件夹下创 ...
-
emlog编辑器探寻之旅
本文同步于我的个人博客 emlog编辑器探寻之旅 一直想要寻找一个好用的emlog文本编辑器,寻觅了很久,从默认的KindEditor编辑器开始,用了几天就感觉特别难用,很多需求根本满足不了.后来想要 ...
-
headless webkit(*面浏览器、爬虫)
phantomjs / puppeteer https://github.com/amir20/phantomjs-node https://github.com/GoogleChrome/puppe ...