JQuery中的Ajax操作

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

JQuery是什么?

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

 JQuery是如何操作Ajax的?

底层方法

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

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

<script>
        $.ajax({
            url:"url",// 请求地址
            type:"get",
            data:{// 传递参数
                username:"admin",
                password:"123123"
            },
            dataType:"json",
            error:function() {/*请求失败时的操作*/
                // 系统超时等错误提示
            },
            success:function(data){/*请求成功时的回调函数*/
                // dom操作,处理数据
            }
        })

        $.get(
            "url",
            {username:"admin", password:"123"},
            function(data){

            }
        );
        $.post(
            "url",
            {username:"admin", password:"123"},
            function(data){

            }
        );
    </script>

事件委托:

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

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

.bind()

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

$("info_table td").bind("click", function(){/*显示更多信息*/});

.live()

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

$("#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...不行;

解决方法:

(function($){
    $("#info_table td").live("click",function(){/*显示更多信息*/});
})(jQuery);

.delegate()

$("#info_table").delegate("td","click",function(){/*显示更多信息*/});

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

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

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery-2.2.4.js"></script>
    <script>
        $.ajax({
            url:"url",// 请求地址
            type:"get",
            data:{// 传递参数
                username:"admin",
                password:"123123"
            },
            dataType:"json",
            error:function() {/*请求失败时的操作*/
                // 系统超时等错误提示
            },
            success:function(data){/*请求成功时的回调函数*/
                // dom操作,处理数据
            }
        })

        $.get(
            "url",
            {username:"admin", password:"123"},
            function(data){

            }
        );
        $.post(
            "url",
            {username:"admin", password:"123"},
            function(data){

            }
        );
    </script>
</head>
<body>
    <ul id="classType">
        <li>原来页面上就有的元素</li>
    </ul>
    <script>
        $(function() {
            $.get("http://datainfo.duapp.com/shopdata/getclass.php",function(data){
                var _jsonArr = JSON.parse(data);
                $.each(_jsonArr, function(index, value) {
                    var $li = $("<li>").addClass("active");
                    $li.text(value.className);
                    $("#classType").append($li);
                });
            })
        });
       $("#classType").on("click", "li", function() {
           alert("事件委托的方式,支持未来元素");
       })
    </script>
</body>
</html>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值