第6章 jQuery与Ajax的应用

时间:2022-09-13 22:39:51

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例子。

点击按钮,返回字符串:

第6章 jQuery与Ajax的应用

(1)定义一个函数,通过该函数来异步获取信息,代码如下:

第6章 jQuery与Ajax的应用

(2)声明一个空对象用来装入XMLHttpRequest对象,代码如下:

第6章 jQuery与Ajax的应用

(3)给XMLHttpRequest对象赋值,代码如下:

第6章 jQuery与Ajax的应用

IE5, IE 6是以ActiveXObject的方式引入XMLHttpRequest对象的,而其他浏览器的XMLHtttRequest对象是window的子对象。

(4)实例化成功后,使用open()方法初始化}CMLHttpRequest对象,指定HTTP方法和要使用的服务器URL,代码如下:

第6章 jQuery与Ajax的应用

(5)因为要做一个异步调用,所以需要注册一个XMLHttpRequest对象将调用的回调事件处理器当它的readyState值改变时调用。当readyState值被改变时,会激发一个readystatechange事件,可以使用onreadystatechange属性来注册该回调事件处理器,代码如下:

第6章 jQuery与Ajax的应用

在处理该响应之前,事件处理器应该一首先检查readyState的值和HTTP状态。当请求完成加载(readyState值为4)并且响应已经成功(HTTP状态值为200)时,就可以调用一个JavaScript函数来处理该响应内容,代码如下:

第6章 jQuery与Ajax的应用

6.5 jQuery中的Ajax

jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是 load()$.get()$.post()方法,第3层是$.getScript()$.getJSON()方法。首先介绍第2层的方法,因为其使用频率很高。

6.5.1 load()方法

  • 1.载入HTML文档

    第6章 jQuery与Ajax的应用

    第6章 jQuery与Ajax的应用

    例如:

    第6章 jQuery与Ajax的应用

    test.html页面的HTML内容就会被加载并插入主页面`

    的元素中。

  • 2.筛选载入的HTML文档

    如果只需要加载test.html页而内的某些元素,那么可以使用load()方法的URL参数来达到目的。

load)方法的URL参数的语法结构为 “urt selector”。注意,URL和选择器之间有一个空格。例如只需要加载test.html页面中class为“para”的内容,以使用如下代码来完成:

第6章 jQuery与Ajax的应用

  • 3.传递方式

    load()方法的传递方式根据参数data来自动指定。如果没有参数传递,则采用GET方式传递;

    反之,则会自动转换为POST方式。

    第6章 jQuery与Ajax的应用

  • 4.回调参数

    对于必须在加载完成后才能继续的操作,load()方法提供了回调函数( callback ),该函数有3个参数,分别代表请求返问的内容、请求状态和XMLHttpRequest对象,jQuery代码如下:

    第6章 jQuery与Ajax的应用

    第6章 jQuery与Ajax的应用

6.5.2 $.get()方法和$.post()方法

  • 1.$.get()方法

    $.get()方法使用GET方式来进行异步请求。

    它的结构为:

    第6章 jQuery与Ajax的应用

    第6章 jQuery与Ajax的应用

  • 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代码如下:

    第6章 jQuery与Ajax的应用

    等同于:

    第6章 jQuery与Ajax的应用

但这种方式并不理想。为此,jQuery提供了$.getScript()方法来直接加载.js文件:

第6章 jQuery与Ajax的应用

    1. $.getJSON()方法

      $.getJSON()方法用于加载JSON文件,与$.getScript()方法的用法相同。

      以下例子加载JSON文件,并在回调函数中处理返回的数据:

      第6章 jQuery与Ajax的应用

jQuery提供了一个通用的遍历方法 $.each() 以用于遍历对象和数组。

$.each()函数不同于jQuery对象的each()方法,它是一个全局函数,不操作jQuery对象,而是以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。回调函数拥有两个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容。代码如下:

第6章 jQuery与Ajax的应用

第6章 jQuery与Ajax的应用

不仅如此,还能通过使用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实现。

它的结构为:

第6章 jQuery与Ajax的应用

该方法只有1个参数,但在这个对象里包含了$.ajax()方法所需要的请求设置以及回调函数等信息,参数以key/value的形式存在,所有参数都是可选的,常用参数如表6-3所示。

第6章 jQuery与Ajax的应用

第6章 jQuery与Ajax的应用

前面用到的$.load(), $.get(), $.post(), $.getScript()$.getJSON()这些方法,都是基于$.ajax() 方法构建的,$.ajax()方法是jQuert最底层的Ajax实现,因此可以用它来代替前面的所有方法。

6.6 序列化元素

  • 1.serialize()方法

    为了获取姓名和内容,必须将字段的值逐个添加到data参数中。代码如下;

    第6章 jQuery与Ajax的应用

这种方式在只有少量字段的表单中,勉强还可以使用,但如果表单元素越来越复杂,使用这种方式在增大工作一鼠的同时也使表单缺乏弹性。jQuery为这一常用的操作提供了简化的方法——serialize()。与jQuery中其他方法一样,serialize()方法也是作用于一个jQuery对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求。

第6章 jQuery与Ajax的应用

  • 2.serializeArray()方法

    在jQuery中还有一个与serialize()类似的方法一serializeArray(),该方法不是返回字符串,而是将DOM元素序列化后,返回JOSN格式的数据。jQuery代码如下:

    第6章 jQuery与Ajax的应用

    1. $.param()方法

      它是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化。

      比如将一个普通的对象序列化:

      第6章 jQuery与Ajax的应用

6.7 jQuery中的Ajax全局事件

通过jQuery提供了一些自定义全局函数,能够为各种与Ajax相关的事件注册回调函数。例如当Ajax请求开始时,会触发ajaxStart()方法的回调函数; 当Ajax请求结束时,会触发ajaxStop{)方法的回调函数。这些方法都是全局的方法,因此无论创建它们的代码位于何处,只要有Ajax请求发生时,就会触发它们。

如需要为网页添加一个提示信息,常用的提示信息是“加载中…”,代码如下:

第6章 jQuery与Ajax的应用

第6章 jQuery与Ajax的应用

Note:

如果想使某个Ajax请求不受全局方法的影响,那么可以在使用$.ajax(options)方法时,将参数中的global设置为false, jQuery代码如下:

第6章 jQuery与Ajax的应用

第6章 jQuery与Ajax的应用的更多相关文章

  1. 第六章 jQuery和ajax应用

    ajax是异步JavaScript和xml的简称. 一. ajax补白 优势 不足(不一定是不足) 不需要任何插件(但需要浏览器支持js) XMLHttpRequest对象在不同浏览器下有差异 优秀的 ...

  2. jQuery 第六章 jQuery在Ajax应用

    1.本章目标 ajax 2.ajax 异步刷新技术,我们的网页不需要全部刷新,按需实现局部刷新,上线后台的交互 用户体验好 地图,前台验证,表单提交,修改,查询等等 原生的js和ajax packag ...

  3. 锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用

    1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpR ...

  4. 三、jQuery--jQuery基础--jQuery基础课程--第8章 jQuery 实现Ajax应用

    1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:load(url,[data],[callback]) ...

  5. jQuery与Ajax的应用——《锋利的jQuery》(第2版)读书笔记3

    第6章 jQuery与Ajax的应用 jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是load().$.get()和$.post()方法,第3层是$ ...

  6. 《锋利的JQuery》读书要点笔记5——jQuery与Ajax的应用

    第6章 jQuery与Ajax的应用 Ajax的全称:Asynchronous JavaScript and XML (异步Javascript和XML) 传统模式中,数据提交通过表单方式实现,数据的 ...

  7. Jquery书写ajax

    根据API学习本章 Jquery书写ajax 使用ajax发送表单到servlet,发送时显示等待图片,servlet处理完返回信息,在页面显示返回信息,并且隐藏等待图片 <%@ page la ...

  8. 第十六章:Python の Web开发基础&lpar;三&rpar; jQuery与Ajax

    本課主題 jQuery 介绍 Ajax 介绍 jQuery 介绍 选择器 jQuery 的选择器分不同的种类,主要目的是用来查找目标的 HTML 标签,方便对目标标签进行操作,比如找到 <li& ...

  9. 第7章 jQuery插件的使用和写法

    第7章 jQuery插件的使用和写法 插件又称扩展,是一种遵循一定规范的应用程序接口写出来的程序. 插件的编写思想基于面向对象. 获取最新的插件可以查看jquery官网:http://plugins. ...

随机推荐

  1. Java中替换HTML标签的方法代码

    这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...

  2. IE11下ASP&period;NET Forms身份认证无法保存Cookie的问题

    IE11下ASP.NET Forms身份认证无法保存Cookie的问题 折腾了三四天,今天才找到资料,解决了. 以下会转贴,还没来得及深究,先放着,有空再学习下. ASP.NET中使用Forms身份认 ...

  3. jquery&period;ajax提交多值&lpar;数组&rpar;

    偶尔会遇到类似复选框的一个属性存在多值情况,若使用ajax提交的化,设置data :{ids:[1,2,3,4]} 提交后,后台无法使用ids获取到数据. 这里可以用到ajax的 traditiona ...

  4. Mysql服务启动问题

    mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) u ...

  5. 使用PageHeap&period;EXE或GFlags&period;EXE检查内存越界错误

    必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ------------------------ ...

  6. &period;net之简单工厂模式

    //抽象一个生产笔的方法 namespace simpleFactory{ public abstract class AbstractPen { public abstract void creat ...

  7. JS INPUT输入的时候全角自动转为半角

    function CtoH(obj){var str=obj.value;var result="";for (var i = 0; i < str.length; i++) ...

  8. pythonのsimple&lowbar;tag

    当我们需要在页面种直接调用py文件中的某些方法时,我们就要用到simple_tag.具体步骤如下: 1.在某个app下创建templatetags文件夹,切记该名称是不可以改变的. 2.在该文件夹下创 ...

  9. emlog编辑器探寻之旅

    本文同步于我的个人博客 emlog编辑器探寻之旅 一直想要寻找一个好用的emlog文本编辑器,寻觅了很久,从默认的KindEditor编辑器开始,用了几天就感觉特别难用,很多需求根本满足不了.后来想要 ...

  10. headless webkit(*面浏览器、爬虫)

    phantomjs / puppeteer https://github.com/amir20/phantomjs-node https://github.com/GoogleChrome/puppe ...