zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    小程序登录页面
    小程序环境搭建
    js闭包
    作用域和作用域链及预解析
    高阶函数
    在.net core项目中,增加gulp打包任务
    阿里云部署docker-swarm 内网问题
    .net identity scaffold
    c#中对XML反序列化
    c# Reactive Extension中的FromEventPattern和FromEvent
  • 原文地址:https://www.cnblogs.com/weilan/p/7212191.html
Copyright © 2011-2022 走看看