关于jQuery的Ajax操作

今天和大家分享下JQuery中的Ajax操作

JQuery是什么?

            是一个JavaScript类库,封装了大量的JavaScript底层代码。

 JQuery是如何操作Ajax的?

底层方法

                $selector.load(..) 该种方法了解即可
                $.ajax(..);

            对JavaScript底层Ajax操作进行了封装,提供了两种方法进行操作底层的$.ajax()操作
                $.get(..);
                $.post(..);

[html]  view plain  copy
  1. <script>  
  2.         $.ajax({  
  3.             url:"url",// 请求地址  
  4.             type:"get",  
  5.             data:{// 传递参数  
  6.                 username:"admin",  
  7.                 password:"123123"  
  8.             },  
  9.             dataType:"json",  
  10.             error:function() {/*请求失败时的操作*/  
  11.                 // 系统超时等错误提示  
  12.             },  
  13.             success:function(data){/*请求成功时的回调函数*/  
  14.                 // dom操作,处理数据  
  15.             }  
  16.         })  
  17.   
  18.         $.get(  
  19.             "url",  
  20.             {username:"admin", password:"123"},  
  21.             function(data){  
  22.   
  23.             }  
  24.         );  
  25.         $.post(  
  26.             "url",  
  27.             {username:"admin", password:"123"},  
  28.             function(data){  
  29.   
  30.             }  
  31.         );  
  32.     </script>  

事件委托:

随着DOM结构的复杂化和Ajax等动态脚本技术的运用,事件委托自然浮出了水面。jQuery为绑定和委托事件提供了.bind()、.live()和.delegate()方法。

具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。

.bind()

假设有一个多行多列的表格,我们想让用户单击每个单元格都能看到与其中内容相关的更多信息(比如,通过提示条)。为此,可以为每个单元格都绑定click事件:

[html]  view plain  copy
  1. $("info_table td").bind("click", function(){/*显示更多信息*/});  

.live()

只要用jQuery 1.3新增的.live()方法代替.bind()方法即可:

[html]  view plain  copy
  1. $("#info_table td").live("click",function(){/*显示更多信息*/});  


到目前为止,一切似乎很完美。可惜,事实并非如此。因为.live()方法并不完美,它有如下几个主要缺点:

  • $()函数会找到当前页面中的所有td元素并创建jQuery对象,但在确认事件目标时却不用这个td元素集合,而是使用选择符表达式与event.target或其祖先元素进行比较,因而生成这个jQuery对象会造成不必要的开销;
  • 默认把事件绑定到$(document)元素,如果DOM嵌套结构很深,事件冒泡通过大量祖先元素会导致性能损失;
  • 只能放在直接选择的元素后面,不能在连缀的DOM遍历方法后面使用,即$("#info_table 
    td").live...可以,但$("#info_table").find("td").live...不行;

解决方法:

[html]  view plain  copy
  1. (function($){  
  2.     $("#info_table td").live("click",function(){/*显示更多信息*/});  
  3. })(jQuery);  

.delegate()

[html]  view plain  copy
  1. $("#info_table").delegate("td","click",function(){/*显示更多信息*/});  

但是 如果使用事件委托时,如果注册到目标元素上的其他事件处理程序使用.stopPropagation()阻止了事件传播,那么事件委托就会失效。

如果页上的标签~有可能存在未来元素,使用事件委托的方式进行事件绑定

        $selector.bind("click", fn)   不支持未来元素
        $selector.live(...) 支持未来元素~ 但是JQ在1.8版本以后废弃了!
        $selector.delegate(...) 支持未来元素,是一个过渡方法,不建议使用了
        $selector.on(...) 不支持/支持未来元素,常规方式,也是官网推荐方式

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Title</title>  
  6.     <script src="jquery-2.2.4.js"></script>  
  7.     <script>  
  8.         $.ajax({  
  9.             url:"url",// 请求地址  
  10.             type:"get",  
  11.             data:{// 传递参数  
  12.                 username:"admin",  
  13.                 password:"123123"  
  14.             },  
  15.             dataType:"json",  
  16.             error:function() {/*请求失败时的操作*/  
  17.                 // 系统超时等错误提示  
  18.             },  
  19.             success:function(data){/*请求成功时的回调函数*/  
  20.                 // dom操作,处理数据  
  21.             }  
  22.         })  
  23.   
  24.         $.get(  
  25.             "url",  
  26.             {username:"admin", password:"123"},  
  27.             function(data){  
  28.   
  29.             }  
  30.         );  
  31.         $.post(  
  32.             "url",  
  33.             {username:"admin", password:"123"},  
  34.             function(data){  
  35.   
  36.             }  
  37.         );  
  38.     </script>  
  39. </head>  
  40. <body>  
  41.     <ul id="classType">  
  42.         <li>原来页面上就有的元素</li>  
  43.     </ul>  
  44.     <script>  
  45.         $(function() {  
  46.             $.get("http://datainfo.duapp.com/shopdata/getclass.php",function(data){  
  47.                 var _jsonArr = JSON.parse(data);  
  48.                 $.each(_jsonArr, function(index, value) {  
  49.                     var $li = $("<li>").addClass("active");  
  50.                     $li.text(value.className);  
  51.                     $("#classType").append($li);  
  52.                 });  
  53.             })  
  54.         });  
  55.        $("#classType").on("click", "li", function() {  
  56.            alert("事件委托的方式,支持未来元素");  
  57.        })  
  58.     </script>  
  59. </body>  
  60. </html>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值