zoukankan      html  css  js  c++  java
  • jQuery中的ajax

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

    1. load()方法

    1.1  载入HTML文档

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

    load(url[,data][,callback])
    load方法参数解释
    参数名称 类型 说明
    url string类型 请求html页面的url地址
    data(可选) object类型 发送至服务器的key/value数据
    callback(可选) function类型 请求完成时的回调函数,无论请求成功或失败

    1.2 筛选载入的HTML文档

    load()方法的URL参数的语法结构为:"url selector"。注意,URL和选择器之间有一个空格。

    $("#msg").load("ajax.html .para");//只需要加载ajax.html页面中class为"para"的内容

    1.3 传递方式

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

    $("#resText").load("test.php",{name:"rain",age:"22"},function(){
    //...
    });

    1.4 回调函数

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

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

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

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

    2.1 $.get()方法

    $.get()方法使用GET方式来进行异步请求。它的结构为:

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

    $.get()方法的回调函数只有两个参数:返回内容data和请求状态status。

    $.get()参数解释

    参数名称

    类型

    说明

    url

    String

    请求的HTML页的URL地址

    data(可选)

    Object

    发送至服务器的key/value数据回作为QueryString附加到请求URL中

    callback(可选)

    Function

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

    type(可选)

    String

    服务器端返回内容的格式,包括xml、html、script、json、text和_default

    返回内容data的格式有:

    (1)HTML片段

    (2)XML文档

    由于期待服务器返回的数据格式是XML文档,因此需要在服务端设置Content-Type类型,代码如下:

    header("content-type:text/xml;charset=utf-8"); //PHP

    (3)JSON文件

    2.2 $.post()方法

    与$.get()的区别:

    (1) get请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的实体内容发送给web服务器。
    (2) get方式对传输的数据有大小限制(<=2kb),而使用POST方式传递的数据量不受限制
    (3) get方式请求的数据会被浏览器缓存起来,引起安全性问题
    (4) get方式和post方式传递的数据在服务器端的获取也不相同。php中,get方式的数据可以用$_GET[]获取,而post方式可以用$_POST[]获取。两种方式都可以用$_REQUEST[]来获取。

    由于post和get方式提交的所有数据都可以通过$_REQUEST[]来获取,因此只需要改变jQuery函数,就可以在get请求和post请求之间切换。

    另外,当load()方法带有参数传递时,会使用post方式发送请求。因此也可以使用load()方法来完成同样的功能。如:

    $(function(){
    $("#send").click(function(){
    $("#resText").load("post1.php",{
    username:$("username").val(),
    content:$("#content").val()
    });
    });
    });

    3. $.getScript()方法和$.getJson()方法

    3.1 $.getScript()

    有时,在页面初次加载时就取得所需的全部JavaScript文件是完全没有必要的。虽然可以在需要哪个JavaScript文件时,动态创建<script>标签。jQuery代码如下:

    $(document.createElement("script")).attr("src","test.js").appendTo("head");

    或者

    $("<script type='text/javascript' src='test.js'></script>").appendTo("head");

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

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

    3.2 $.getJSON()

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

    $(function(){
    $("#send").click(function(){
    $.getJSON("test.json",function(data){
    //data:返回的数据
    });
    });
    });

    4.  $.ajax()方法

    它是jQuery最底层的Ajax实现。它的结构为:

    $.ajax(options)

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

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

    例如,采用如下代码代替$.getScript()方法:

    $(function(){
    $("#send").click(function(){
    $.ajax({
    type:"GET",
    url:"test.js",
    dataType:"script"
    });
    });
    });

    再如使用$.ajax()方法代替$.getJSON()方法:

    $(function(){
    $("#send").click(function(){
    $.ajax({
    type:"GET",
    url:"test.json",
    dataType:"json",
    success:function(data){
    $("#resText").empty();
    var html = "";
    $.each(data,function(commentIndex,comment){
    html += "<div class='comment'><h6>" + comment["username"] + ":</h6><p class='para'>" + comment["comment"] + "</p></div>";
    });
    $("#resText").html(html);
    }
    });
    });
    });

    5. 序列化元素

    5.1 serialize()方法

    与jQuery中其他方法一样,serialize()方法也是作用于一个jQuery对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求。

    $("#send").click(function()
    {
        $.get("get1.php", $("#form1").serialize(), function(data, status)
        {
            $("#msg").html(data);
        });
    });

    因为serialize()方法作用于jQuery对象,所以不光只有表单能使用它,其他选择器的元素也都能使用它。

    5.2 serializeArray()方法

    该方法不是返回字符串,而是将DOM元素序列化后,返回JSON格式的数据。

    5.3 $.param()方法

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

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

    7. jQuery中的Ajax全局事件

    通过jQuery提供了一些自定义全局函数,能够为各种上与Ajax相关的事件注册回调函数。例如当Ajax请求开始时,会触发ajaxStart()方法的回调函数;当Ajax请求结束时,会触发ajaxStop()方法的回调函数。

    例如:某个网站图片过多,在Ajax请求过程中,只要图片还未加载完毕,就会一直显示“加载中...”的提示信息。可以极大地改善用户的体验。

    <div id="loading">加载中...</div>
    $("#loading").ajaxStart(function()
    {
        $(this).show();
    });
    $("#loading").ajaxStop(function()
    {
        $(this).hide();
    });

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

    $.ajax()
    {
        url: "test.html",
        global: false    //不触发全局Ajax事件
    }

    完毕!

  • 相关阅读:
    eclipse中的项目的JRE换成JDK
    Eclipse中maven项目的创建和运行
    git 发布命令
    vbox中虚拟ubuntu增加新的虚拟硬盘
    MyServer
    java常用的中间件
    高并发解决方案
    浅谈SpringMVC
    浅谈HIbernate
    javaweb笔记七
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/4716251.html
Copyright © 2011-2022 走看看