jQuery中的Ajax

10 篇文章 0 订阅

jQuery中的Ajax

文章目录

jQuery不仅对JavaScript语言进行了封装,也对Ajax异步交互进行了封装。jQuery提供了六个Ajax操作的方法:

  • load()方法
  • $get()方法和 $.post()方法
  • $ajax()方法
  • $getScript(方法和 $getJSON()方法

jQuery除了封装了六个Ajax操作的方法,还提供了以下几种事件:

  • ajaxStart()和ajaxStop()事件

  • ajaxComplete()事件、ajaxSend()事件、ajaxError()事件和ajaxSuccess()事件

load()方法

load()方法是jQuery中最为简单的Ajax方法,其语法结构如下:

$element.load(url,[data],[callback]);
  • url: 请求HTML页面的url地址。

  • data: 发送给服务器端的key/value形式的数据内容。

  • callback: Ajax请求完成时的回调函数。

$('button').click(function() {
	$('div').load('server.js');
});

注意: load()方法的请求方式由是否传递参数决定。即不传递 data 参数,为GET方式;传递 data 参数,为POST方式。

代码演示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>load()方法</title>
  </head>
  <body>
    <button>按钮</button>

    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
            load(url, [data], [callback])方法
            * 参数
                * url - 异步请求的地址
                * data - 异步请求的数据
                * callback - 异步请求成功后的回调函数
            * 返回值 - 服务器端的响应结果
            * 注意 - 自动将返回结果写入到目标元素中
        */
        $("button").load("data/server2.json", function () {
          console.log("异步请求成功...");
        });
      });
    </script>
  </body>
</html>

如果不传入data参数,默认为GET请求方式

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>load()方法</title>
  </head>
  <body>
    <button>按钮</button>

    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
            load(url, [data], [callback])方法
            * 参数
                * url - 异步请求的地址
                * data - 异步请求的数据
                	* 如果省略请求数据的话,当前的请求数据的话,当前的请求方式为GET
                    * 如果发送请求数据的话,当前的请求方式为POST
                * callback - 异步请求成功后的回调函数
            * 返回值 - 服务器端的响应结果
            * 注意 - 自动将返回结果写入到目标元素中
        */
        $("button").load("data/server2.json", { name: "张无忌" }, function () {
          console.log("异步请求成功...");
        });
      });
    </script>
  </body>
</html>

如果传入data参数,默认为POST请求方式

在这里插入图片描述

$.get()与 $.post()方法

  • $get(方法使用GET方式向服务器端发送异步请求。其语法结构如下:

    $.get(url,[data],[callback],[type]);
    
  • url: 请求HTML页面的url地址。

  • data: 发送给服务器端的key/value形式的数据内容。

  • callback: Ajax请求完成时的回调函数。

  • type: 设置返回数据内容的格式。值为xml、html、script、json、text和_default。

$('button').click(function(){
	$.get('server.js',function(data, textStatus){
		//data:表示服务器端响应的数据内容
        //textStatus: success、error、notmodified和timeout四种请求状态之一
    });
});

代码演示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>get()与post()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
                get(url, [data], [callback], [type])方法 - 请求方式为GET
                * 参数
                    * url - 异步请求地址
                    * data - 异步请求的数据
                    * callback - 异步请求成功后的回调函数
              */
        $.get("data/server2.json", function () {
          console.log("异步请求成功啦...");
        });
      });
    </script>
  </body>
</html>

效果如下

可以看到,如果不传递 data 参数的话,默认为GET请求,并且请求URL是不带参数的

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>get()与post()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
                get(url, [data], [callback], [type])方法 - 请求方式为GET
                * 参数
                    * url - 异步请求地址
                    * data - 异步请求的数据
                    * callback - 异步请求成功后的回调函数
              */
        $.get("data/server2.json", { name: "张无忌" }, function () {
          console.log("异步请求成功啦...");
        });
      });
    </script>
  </body>
</html>

可以看到,如果传递 data 参数的话,默认也为GET请求,并且请求URL是带参数的

callback中响应结果

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>get()与post()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
                get(url, [data], [callback], [type])方法 - 请求方式为GET
                * 参数
                    * url - 异步请求地址
                    * data - 异步请求的数据
                    * callback - 异步请求成功后的回调函数
                        function(response){}
                    * type - 设置服务器端响应结果的格式
                        xml、html、script、json、text等
              */
        $.get("data/server2.json", { name: "张无忌" }, function (response) {
          console.log(response);
        });
      });
    </script>
  </body>
</html>

在这里插入图片描述

不传递type类型默认返回json格式的数据内容

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>get()与post()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
                get(url, [data], [callback], [type])方法 - 请求方式为GET
                * 参数
                    * url - 异步请求地址
                    * data - 异步请求的数据
                    * callback - 异步请求成功后的回调函数
                        function(response){}
                    * type - 设置服务器端响应结果的格式
                        xml、html、script、json、text等
              */
        $.get(
          "data/server2.json",
          { name: "张无忌" },
          function (response) {
            console.log(response);
          },
          "text"
        );
      });
    </script>
  </body>
</html>

在这里插入图片描述

不传递type类型会返回指定格式的数据内容

$.post方法同样用法

$.ajax()方法

具体可以参考 jQuery文档 jQuery.ajax(url,[settings])

$ajax()方法是jQuery中最为底层的Ajax方法,其语法结构如下:

$.ajax(url,[settings]);
  • url: 请求HTML页面的url地址。

  • settings: key/value形式的请求设置,所有参数都是可选的。

$("button").click(function(){
	$.ajax({
		url:"server.js",
		type:"post",
		data:"this is ajax",
		success:function(data){
			console.log(data);//服务器响应回数据之后的处理逻辑
        }
	});
);

代码演示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>ajax()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        /*
                $.ajax(url, [settings])方法
                * 参数
                    * url - 请求地址
                    * settings - 设置异步请求的参数
                * settings选项 - 对象类型
                    * type - 设置请求方式
                    * data - 发送给服务器端的请求数据
                    * dataType - 服务器端响应结果的格式
                    * success - 异步请求成功后的回调函数
                        function(data, textStatus, jqXHR){}
                            * data - 表示服务器端响应的结果
                            * textStatus - 表示服务器端当前的状态
                            * jqXHR - Ajax中的核心对象
            */
        $.ajax("data/server2.json", {
          type: "get",
          dataType: "text",
          success: function (data) {
            console.log(data);
          },
        });
      });
    </script>
  </body>
</html>

在这里插入图片描述

$.getScript()方法

$getScript(方法是jQuery中用于动态加载指定JavaScript文件,其语法结构如下:

$.getScript(url,[callback);
  • url: 请求JavaScript文件的url地址。
  • callback: 指定JavaScript文件成功加载后的回调函数。
$('button').click(function(){
	$.getScript('test.js');
});

代码演示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>getScript()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        // 动态加载指定JavaScript文件,并且执行
        $.getScript("data/server3.js", function (data) {
          console.log(data);
          eval(data);
        });
      });
    </script>
  </body>
</html>

在这里插入图片描述

$.getJSON()方法

$getuJSON(方法是jQuery中用于动态加载指定JSON格式的数据内容,其语法结构如下:

$.getJSON(url,[data],[callback]);
  • url: 请求JavaScript文件的url地址。

  • data: 发送给服务器端的key/value形式的数据内容。

  • callback: 指定JavaScript文件成功加载后的回调函数。

$('button').click(function(){
	$.getJSON('test.json', function(data){
		console.log(data);
	};
};

代码演示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>gtJSON()方法</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
      $("button").click(function () {
        // getJSON()方法的请求方式为GET
        $.getJSON("data/server2.json", { name: "张无忌" }, function (data) {
          console.log(data);
        });
      });
    </script>
  </body>
</html>

在这里插入图片描述

Ajax的全局事件

加载请求: .ajaxStart() 和 .ajaxstop()

    $(document).ajaxStart(function(){
        $('.loading').show();
    }).ajaxStop(function(){
        $('.loading').hide();
    });

错误处理: .ajaxError()

    //1 $.ajax()使用属性提示错误
    $('form input[type=button]').click(function(){
        $.ajax({
            type:"post",
            url:"test1.php",
            async:true,
            data:$('form').serialize(),
            success:function(response,status,xhr){
                $('#box').html(response);
            },
//            timeout:3000
//            global:false
            error:function(xhr,errorText,errorType){
//                alert(errorText + ':' +errorType);
                alert(xhr.status + ':' +xhr.statusText);
            }
            
        });
    });
    
    //2 $.post()使用连缀.error()方法提示错误,将被.fail()取代
    $('form input[type=button]').click(function(){
        $.post('test1.php').error(function(xhr,errorText,errorType){
            alert(errorText + ':' +errorType);
            alert(xhr.status + ':' +xhr.statusText);
        });
    });
    
    //3 使用全局.ajaxError()方法
    $(document).ajaxError(function(event,xhr,settings,info){
        alert(event.type);
        alert(event.target);
        for(var i in event){ //打印出event的所有属性
            document.write(i + '<br />');
        }
    });

.ajaxSuccess(),对应一个局部方法:.success(),请求成功完成时执行。

.ajaxComplete(),对应一个局部方法:.complete(),请求完成后注册一个回调函数。

.ajaxSend(),没有对应的局部方法,只有属性 beforeSend,请求发送之前要绑定的函数。

    //$.post()使用全局
    $('form input[type=button]').click(function(){
        $.post('test.php',$('form').serialize());
    });
    
    $('document').ajaxSend(function(){
        alert(发送请求之前执行);
    }).ajaxComplete(function(response,status,xhr){
        alert('请求完成后,不管是否失败成功');
    }).ajaxSuccess(function(event,xhr,settrings){
        alert('请求成功后,不管是否成功');
    }).ajaxError(function(event,xhr,settrings){
        alert('请求失败后');
    });
    
    //$.post()使用局部
    $('form input[type=button]').click(function(){
        $.post('test.php',$('form').serialize()).success(function(){
            alert('请求成功后');
        }).complete(function(){
            alert('请求完成后');
        }).error(function(){
            alert('请求失败后');
        });
    });
    
    //$.ajax()使用属性
    $('form input[type=button]').click(function(){
        $.ajax({
            type:"post",
            url:"test1.php",
            async:true,
            data:$('form').serialize(),
            success:function(response,status,xhr){
                alert('请求成功后');
            },
            complete:function){
                alert('请求完成后,不管失败成功');
            },
            beforeSend:function(){
                alert('发送请求之前');
            },
            error:function(xhr,errorText,errorType){
                alert('请求失败后');
            }
        });
    });    

注:在 jQuery1.5 版本以后,使用**.success().error().complete()连缀的方法,可以用.done().fail().always()**取代。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码小余の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值