jQuery中的Ajax

  jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是load()、$.get()、$.post()方法,第3层是$.getScript()和$.getJSON()方法。

 

  load()方法

  load()方法是jQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中。它的结构为:

load(url [,data] [,callback])

  ♦ url:请求HTML页面的URL地址

  ♦ data:发送至服务器的key/value数据

  ♦ callback:请求完成时的回调函数,无论请求成功或失败

$(function(){
    $("selector").click(function(){
        $("#panel").load("test.html");
    })
})

  当点击页面元素时,test.html页面的HTML内容就会被加载并插入主页面<div id="panel"></div>的元素中。

  如果要筛选载入的HTML文档,可以通过url 参数传递,语法结构:“url selector”。例如只需要加载test.html页面中的class为"para"的内容

$("#panel").load("test.html .para");

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

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

$("#panel").load("test.html",function(responseText,textStatus,XMLHttpRequest){
    //responseText;        请求返回的内容
    //textStatus;          请求状态:success、error、notmodified、timeout4种
    //XMLHttpRequest;      XMLHttpRequest对象
});

  在load()方法中,无论Ajax请求是否成功,只要当请求完成后,回调函数就被触发。

 

  $.get()方法

  $.get()方法使用GET方式来进行异步请求,传递数据给服务器中的页面。它的结构为:

$.get(url [,data] [,callback] [,type])

  ♦ url:请求的HTML页的URL地址

  ♦ data(可选):发送至服务器的key/value数据会作为QueryString附加到请求URL中

  ♦ callback(可选):载入成功时回调函数(只有当Response的返回状态是success才调用该方法)自动将请求结果和状态传递给该方法

  ♦ type(可选):服务器端返回内容的格式,包括xml、html、script、text和_default

  data参数传递的格式,如:

$.get("test.html",{name:$("#name").val(),age:$("#age").val()},callback)

  如果服务器端接收到传递的data数据并成功返回,那么就可以通过回调函数将返回的数据显示到页面上。$.get()方法的回调函数只有两个参数。

function(data,textStatus){
    //data:返回的内容,可以是XML文档、JSON文件、HTML片段等等。
    //textStatus:请求状态:success、error、notmodified、timeout4种
}

 

  $.post()方法

  它与$.get()方法的结构和使用方式都相同,不过仍有一下区别:

  ♦ GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器。当然,在Ajax请求中,这种区别对用户是不可见的。

  ♦ GET方式对传输的数据有大小限制(通常不能大于2KB),而使用POST方式传递的数据量要比GET方式大得多(理论上不受限制)

  ♦ GET方式请求的数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据。在某种情况下,GET方式会带来严重的安全性问题,而POST方式相对来说就可以避免这些问题。

  ♦ GET方式和POST方式传递的数据在服务器端的获取也不相同。

 

  $.getScript()方法

  $.getScript()可以在需要哪个JavaScript文件时直接加载,并且不需要对JavaScript文件进行处理,JavaScript文件会自动执行。

$(function(){
    $("#panel").click(function(){
        $.getScript("test.js");
    })
})

  与其他Ajax方法一样,$.getScript()方法也有回调函数,他会在JavaScript文件成功载入后运行。

 

  $.getAjax()方法

  $.getAjax()方法是jQuery最底层的Ajax实现。结构为:

$.ajax(options)

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

  $.ajax()方法常用参数:

  ♦ url:(默认当前页地址)发送请求的地址

  ♦ type:请求方式(POST或GET)默认为GET。其他HTTP请求方法例如PUT和DELETE也可用,但仅部分浏览器支持。

  ♦ timeout:设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置

  ♦ data:发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。GET请求中将附加在URL后。防止这种自动转换,可以查看processData选项。对象必须为key/value格式,如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,jQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2

  ♦ dataType:预期服务器返回的数据类型。如果不指定,jQuery将自动根据HTTP包MIME信息返回responseXML或responseText,并作为毁掉函数参数传递。可用类型包括:xml、html、script、json、jsonp、text。

  ♦ beforeSend:发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次的Ajax请求。XMLHttpRequest对象是唯一的参数

function(XMLHttpRequest){
    this;//调用本次Ajax请求时传递的options参数
}

  ♦ complete:请求完成后调用的回调函数(请求成功或失败时均调用)。参数是XMLHttpRequest对象和一个描述成功请求类型的字符串。

function(XMLHttpRequest,textStatus){
    this;//调用本次Ajax请求时传递的options参数
}

  ♦ success:请求成功后调用的回调函数,有两个参数。①由服务器返回,并根据dataType参数进行处理后的数据。②描述状态的字符串。

function(data,textStatus){
    //data可能是xmlDoc、jsonObj、html、text等等
    this;//调用本次Ajax请求时传递的options参数
}

  ♦ error:请求失败时被调用的函数。该函数有3个参数。①XMLHttpRequest对象。②错误信息。③捕获的错误对象(可选)。

function(XMLHttpRequest,textStatus,errorThrown){
    //通常情况下textStatus和errorThown只有其中一个包含信息。
    this;//调用本次Ajax请求时传递的options参数
}

  ♦ global:默认为true。表示是否触发全局Ajax事件。

 

  serialize()方法

  当提交表单元素的时候,通常使用以下ajax代码:

$(function(){
    $("#submit").click(function(){
        $.get("test.html",{name,$("#name").val();age,$("#age")},function(data,textStatus){
              $("#panel").html(data);
        });
    })
})

  这种方式在只有少量字段的表单中,勉强还可以使用,但如果表单元素越来越复杂,使用这种方式在增大工作量的同时也使表单缺乏弹性,于是jQuery提供了一个简化方式——serialize()。

$(function(){
    $("#submit").click(function(){
        $.get("test.html",$("#form").serialize(),function(data,textStatus){
              $("#panel").html(data);
        });
    })
})

  即使在表单中再增加字段,脚本仍然能够使用,并且不需要做其他多余工作。

 

  $param()方法

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

var obj = {a:1,b:2,c:3};
var k = $.param(obj);
alert(k);  //输出a=1&b=2&c=3

 

  jQuery中的Ajax全局事件

  jQuery简化Ajax操作不仅体现在调用Ajax方法和处理响应方面,而且还体现在对调用Ajax方法的过程中的HTTP请求的控制。通过jQuery提供的一些自定义全局函数,能够为各种与Ajax相关的事件注册回调函数。例如当Ajax请求开始时,会触发ajaxStart()方法的回调函数;当Ajax请求结束时,会触发ajaxStop()方法的回调函数。这些方法都是全聚德方法,因此无论创建它们的代码位于何处,只要有Ajax请求发生时,就出发它们。

  Ajax全局事件中的方法包括:

  ♦ ajaxStart(callback):Ajax请求开始时执行的函数

  ♦ ajaxStop(callback):Ajax请求结束时执行的函数

  ♦ ajaxComplete(callback):Ajax请求完成时执行的函数

  ♦ ajaxError(callback):Ajax请求发生错误时执行的函数,捕捉到的错误可以作为最后一个参数传递

  ♦ ajaxSend(callback):Ajax请求发送前执行的函数

  ♦ ajaxSuccess(callback):Ajax请求成功时执行的函数

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

 

posted @ 2017-07-20 17:00  蔚蓝色幻想  阅读(263)  评论(0编辑  收藏  举报