好吧,这章不像上章那么水了,总是炒剩饭也不好。

关于AJAX

所谓Ajax,全名Asynchronous JavaScript and XML。(也就异步的JS和XML)

简单点来讲就是不刷新页面来发送和获取数据,然后更新页面。

Ajax的优势

  • 无需插件支持
  • 优秀的用户体验
  • 提高web程序的性能
  • 减轻服务器和带宽的负担

Ajax的不足

  • 浏览器兼容不足
  • 破坏浏览器前进和后退按钮的正常功能
  • 对搜索引擎的支持不足
  • 开发和调试工具的 缺乏

好吧,这些都是几年前的不足。技术的发展很快,这些不足也会慢慢弥补,起码现在调试Ajax并不难。

Ajax的核心是XMLHttpRequest对象,它是Ajax实现的关键。

传统的实现Ajax的例子就不举了,太蛋疼了,我都没记,网上一搜一大堆。

关于jQuery中的Ajax

$.ajax()方法是封装了最原始的js的Ajax方式。

load(),$.get(),$.post()是封装了$.ajax()得来

$.getScript()和$.getJSON()是进一步的封装。

  • load()方法

    • 用处:载入远程HTML代码并插入DOM中,通常用于获取静态的数据文件,结构为:load(url [,data] [,callback])。

      • url为请求的地址
      • data可选,为发动到服务器的参数对象
      • callback为回调函数,请求不论成功还是失败都调用
    • 载入页面的时候甚至可以在地址里加上筛选
      $("#resDiv").load("test.html .myClass");//这个div里只载入test.html页面里面 样式为myClass 的元素
      //举一个完整的例子
      $(function(){
      $("#resDiv").load("text.php",{name:"troy",textInfo:"hello"},function(responseText,textStatus,XMLHttpRequest){
      //responseText:请求返回的内容
      //textStatus: 请求状态:success、error、notmodiffied、timeout 4种
      //XMLHttpRequest: XMLHttpRequest对象
      });
      });
  • $.get()方法
    • 明显的看到调用的方式不同,所以说这函数是jQuery的全局函数。而此前的方法和load()这种都是对jQuery对象进行操作
    • $.get()方法使用GET方式来进行异步请求,结构为:$.get(url [,data] [,callback] [,type])
      • 前三个参数就不说了,唯一不同的是callback只有请求成功才调用
      • type参数为服务器端返回内容的格式,包括xml,html,script,json,text和_default
    • 例子
      $("#send").click(function()
      $.get("get1.php"
      ,{
      username:$("#username").val(),
      content:$("#content").val()
      }
      ,function(data,textStatus){
      //data: 返回的内容,可以是XML文档、JSON文件、HTML片段
      //textStatus: 请求状态:success、error、notmodiffied、timeout 4种
      }
      )
      })
  • $.post()方法
    • 它与get方法的玩法一样,不过一个是get方式,一个是post方式。
  • $.getScript()方法
    • 有的时候页面初次加载没必要获取所有的脚本,所以jQuery提供了getScript这种方法来直接加载js文件。
    • 例子
      $('#send').click(function(){
      $.getScript('test.js',function(){
      //do something 这个时候脚本已经加载了,不需要再对js文件进行处理
      });
      });
  • $.getJSON()方法
    • 用于加载JSON文件,用法同上,只不过返回的json数据而已

      $('#send').click(function(){
      $.getJSON("myurl",function(data){
      var html="";
      $.each(data,function(commentIndex,comment){
      html+=commentIndex+":"+comment['username']+";";
      })
      alert(html);
      })
      });
      //注意一下ecch这种玩法,同样是个全局函数。他的回调函数中,第一个参数为成员的索引,第二个为变量和内容

      顺便扩展一下,跨域访问的JSONP

      $("#send").click(function(){
      $.getJSON("http://www.某网站.com/services/getMyCmpJson?tags=car&tagmode=any&format=json&jsoncall back=?"
      ,function(data){
      //某些操作
      }
      )
      })
      //JSONP是个非官方协议,采用json与<script>标记结合的方式,主要用于web应用程序跨域
  • $.ajax()方法
    • 这个方法是jQuery最底层的Ajax实现,所以理所当然更加强大以及复杂。
    • 虽然它只有一个参数,但是这个参数对象包含的属性非常多,不过都是可选的。以下列出所有属性:

      • url:默认当前页地址,也可以手动写请求的地址
      • type:默认为GET,也可以写POST
      • timeout:设置请求超时时间(毫秒)
      • data:发送的数据
      • dataType:预期服务器返回的数据类型。
      • beforeSend:发送前的调用的函数,如果次函数返回false将取消本次ajax请求。
        function(XMLHttpRequest){//XMLHttpRequest是唯一的参数
        this;//调用本次Ajax请求时传递的options参数
        }
      • complete:请求完后,无论成功还是失败都调用。
        function(XMLHttpRequest,textStatus){//textStatus描述成功请求类型
        this;//调用本次Ajax请求时传递的options参数
        }
      • success:请求成功后的回调函数
        function(data,textStatus){//data为成功返回的数据
        this;//调用本次Ajax请求时传递的options参数
        }
      • error:请求失败调用的函数
        function(XMLHttpRequest,textStatus,errorThrown){
        // textStatus为错误信息,errorThrown为捕获的错误对象,通常只有其中一个包含信息
        this;//调用本次Ajax请求时传递的options参数
        }
      • global:默认为true。表示是否触发全局Ajax事件。
  • 序列化元素
    • serialize()方法

      • 它能够将DOM元素内容序列化为字符串

        //不仅可以序列化整个表单,也可以序列化单个元素,并且都是自动编码过的
        $.post("myurl",$("#form1").serialize(),function(data,textStatus){
        $("#resText").html(data);
        })
    • serializeArray()方法
      • 它能够将DOM元素内容序列化为JSON格式
    • $.param()方法
      • 这是serialize方法的核心,用来对一个数组或对象按照键值对进行序列化

        var obj={a:1,b:2,c:3};
        var k=$.param(obj);//输出为a=1&b=2&c=3
  • jQuery中的Ajax全局事件
    • ajaxStart()方法:当Ajax请求开始就触发
    • ajaxStop()方法:当Ajax请求结束就触发
      <div id="loading">加载中...</div>
      
      $("#loading").ajaxStart(function(){
      $(this).show();//ajax开始请求就显示加载中
      }); $("#loading").ajaxStop(function(){
      $(this).hide();//ajax开始结束就隐藏加载中
      });
    • ajaxComplete():当Ajax请求完成就触发
    • ajaxError():当Ajax请求发生就触发,捕捉到的错误可以作为最后一个参数传递
    • ajaxSend():当Ajax请求发送前就触发
    • ajaxSuccess():当Ajax请求成功就触发
    • 如果想使某个Ajax请求不受全局事件的影响,可以在$.ajax中将global属性设置为false,这个在前面已经讲过了。当然也可以在ajax请求前:
      $.ajaxPrefilter(function(options){//每次发送前请求
      options.global=true;
      })

好吧,写完了。最后顺带提一下,setTimeout("doMethod()",4000);为4s后执行doMethod这个函数。

//一个简单的定时发送功能
function updateMsg(){
$.post("myurl",{time:timestamp},function(xml){
//do something
});
setTimeout("updateMsg()",4000);
}

【jQuery基础学习】05 jQuery与Ajax以及序列化的更多相关文章

  1. jQuery基础学习3——jQuery库冲突

    默认情况下,jQuery用$作为自身的快捷方式. jQuery库在其他库之后导入 在其他库和jQuery库都被加载完毕后,可以在任何时候调用jQuery.noConflict()函数来将变量$的控制权 ...

  2. jQuery基础学习(一)—jQuery初识

    一.jQuery概述 1.jQuery的优点      jQuery是一个优秀的JavaScript库,极大地简化了遍历HTML文档.操作DOM.处理事件.执行动画和开发Ajax的操作.它有以下几点优 ...

  3. jQuery基础学习(二)—jQuery选择器

    一.jQuery基本选择器 1.CSS选择器     在学习jQuery选择器之前,先介绍一下之前学过的CSS选择器. 选择器 语法 描述 示例   标签选择器 E {                 ...

  4. jQuery基础学习4——jQuery容错性

    使用jQuery选择器不仅比使用传统的getElementById()和getElementsByTagName()函数简洁得多,而且还能避免某些错误. <script type="t ...

  5. jQuery基础学习(三)—jQuery中的DOM操作

    一.查找节点      查找属性节点: 通过jQuery的选择器来完成.      操作属性节点: 调用jQuery对象的attr()来获取它的属性值.      操作文本节点: 通过text()方法 ...

  6. JQuery基础学习总结

    JQuery基础学习总结 简单总结下JQuery: 一:事件 1.change事件 <!DOCTYPE html> <html lang="en"> < ...

  7. 【jQuery基础学习】00 序

    作为一个从来没有认真学过jQuery的菜来讲,我所学的都是jQuery基础. 算是让自己从0开始系统学一遍吧.学习书籍为:<锋利的jQuery>. 虽然是个序,表示一下我是个菜,但还是来几 ...

  8. 【总结整理】JQuery基础学习---样式篇

    进入官方网站获取最新的版本 http://jquery.com/download/    中文 https://www.jquery123.com/ <!--JQuery:轻量级的JavaScr ...

  9. jQuery基础学习

    一.简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“Write ...

  10. 【jQuery基础学习】09 jQuery与前端(这章很水)

    这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...

随机推荐

  1. LR6 碱性电池才能带动微软鼠标

    LR6 碱性电池才能带动微软鼠标   好前一段买个一个微软无线鼠标后来动弹不得,更换电池也不行,本来lp说为什么不扔掉,但因为实在做得很漂亮一直带在身边.改用雷柏的普通无线鼠标后也很是好用.不过要经常 ...

  2. JSP中文乱码解决方案

    学习JSP的过程中总会碰到中文乱码问题,有的是post方式提交没问题,用get方式提交有乱码,还有的是部署到tomcat中没问题,在Eclipse中启动tomcat,发现用get方式提交有乱码.产生乱 ...

  3. UIRefreshControl的使用

    注意: 1.需要在ios6.0之后的版本中使用 2.UIRefreshControl目前只能用于UITableViewController,如果用在其他ViewController中,运行时会错误(即 ...

  4. 网站CSS选择器性能讨论

    CSS选择符由一些初始化参数组成,这些参数指明了要应用这个CSS规则的页面元素.作为一个网站的前端开发工程师,应该避免编写一些常见的开销很大的CSS选择符模式,尽量编写高效的CSS选择符,从而加快页面 ...

  5. JQuery 表格拖动调整列宽效果

    类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...

  6. 增大VM下linux的根目录空间

    增大VM下linux的根目录空间   用的太久,发现VM下的系统空间不足.简单的方法是,分一个新硬盘,挂载到根目录下.    下面是直接增大根目录下空间:  1. 增大vm下的磁盘大小, VM -&g ...

  7. Fabric自动部署太方便了

    之前不知道有Fabric工具,每次发布程序到服务器上的时候,基本流程:本地打包程序 -> Ftp上传 -> 停服务器Apache -> 覆盖文件 -> 启动Apache, 非常 ...

  8. 公钥、私钥、CA认证、数字签名、U盾

    感谢传智播客的方立勋老师,在一个教学视频上,他巧妙地以蒋介石给宋美龄写密信作为例子,生动地讲述了软件密码学知识. 加密分为对称加密和非对称加密,我们传统理解的,发送数据之前使用一个加密器加密,接到数据 ...

  9. GET到新技能,SharpCEF,C#和JS的互相调用

    winform程序内嵌谷歌浏览器,使用大名鼎鼎的“SharpCEF”.这里科普一下: CEF是什么 CEF是Chromium Embedded Framework的缩写,是个基于Google Chro ...

  10. Linux下添加硬盘,分区,格式化详解

    2005-10-17 在我们添加硬盘前,首先要了解linux系统下对硬盘和分区的命名方法. 在Linux下对IDE的设备是以hd命名的,第一个ide设备是hda,第二个是hdb.依此类推 我们一般主板 ...