Ajax(二)

ajax:用于与后台进行交互

JQuery的方法

1.load(url, [data], function(response, status, xhr){}):用于局部刷新
data:发送到服务器的数据
response:响应回来的结果
status:相应的状态
xhr:HTMLHttpRequest对象,给机器看的

$("button").eq(0).click(function() {
    $("#box").load('http://www.liulongbin.top:3005/api/addproduct', {"name":"张三",                     
    "age":20}, function(res, status) {
       console.log(res);
       console.log(status); //status会显示获取成功或者失败
     })
})

2.get()

$("button").eq(1).click(function() {
    $.get('http://www.liulongbin.top:3005/api/getprodlist', function(res) {
        console.log(res);
    })
})

3.post()

$("button").eq(2).click(function() {
    $.post('http://www.liulongbin.top:3005/api/addproduct', {"name":"Cherry"},
    function(res) {
        console.log(res);
    })
})

JQuery中的Ajax

    <input type="text" value="123" name="aa">
    <button>添加</button>

    <script src="js/jquery-1.12.4.js"></script>
    <script>
        /* $.ajax({
            url: '请求的地址',
            type: '请求的类型get/post',
            data: '要发送到服务器的数据',
            dataType: '要求后台返回给我们的数据类型json',
            success: function() {请求成功所执行的函数},
            async: 请求是否异步处理,默认是true异步
        }) */

        $("button").click(function() {
            var value = $("input").val();
            console.log(value);
            $.ajax({
                url: 'http://www.liulongbin.top:3005/api/addproduct',
                type: 'post',
                // data: {'name': value},
                data: 'name=' + value,
                dataType: 'json',
                // 请求成功或者失败之前执行的函数
                beforeSend: function() {
                    console.log("请求成功或者失败之前执行的函数");
                },
                // 请求成功执行的函数
                success: function(data) {
                    console.log(data);
                },
                // 请求失败执行的函数
                error: function(data) {
                    console.log("失败");
                }
            })
        })
    </script>

关于跨域的问题

    Q:为什会出现跨域?

    A:跨域问题来源于JavaScript的同源策略。

    Q:什么是同源策略?

    A:只有 协议+主机名+端口号(如果存在)相同,则允许相互访问。

       也就是说JavaScript只能访问和操作自己域下的资源

       https://www.aaa.com/index.html 调用 https://www.aaa.com/demo.php(没有跨域)

       https://www.aaa.com/index.html 调用 https://www.aba.com/demo.php(跨域:主机名同)

       https://www.aaa.com:3000/index.html 调用 https://www.aaa.com:8080/demo.php(域:端口号不同)

       https://www.aaa.com/index.html 调用 http://www.aaa.com/demo.php(跨域:协议同)

    Q:如何解决跨域问题?

    header('Access-Control-Allow-origin:*');// 允许所有来源访问-->允许所有语言对我这个语言发起请求

    如果指定具体语言,把*换成请求过来的协议+主机名+端口号

    header('Access-Control-Allow-Method:POST,GET');//允许访问的方式

jsonp:jsonp全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发人员创造出的一种非官方跨域数据交互协议
json是描述信息的格式,jsonp是信息传递双方约定的方法

jsonp

    <script>
        function callbackFunction(result) {
            console.log(result);
        }
    </script>
    <!-- 使用jsonp实现跨域请求 -->
    <!-- 法一:利用script标签中src属性,设置请求地址,因为src不受同源策略的约束 -->
    <!-- <script src="https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script> -->

    <!-- 法二:使用JQuery封装的ajax -->
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        // $.ajax({
        //     url: 'https://www.runoob.com/try/ajax/jsonp.php?',
        //     type: 'get',
        //     dataType: 'jsonp',
        //     // 请求php的参数名
        //     jsonp: 'jsoncallback',
        //     // 参数值:
        //     jsonCallback: "callbackFunction",
        //     success: function(data) {
        //         console.log(data);
        //     },
        //     // 请求失败执行的函数
        //     error: function(data) {
        //         console.log("失败");
        //     }
        // })

        // 法三:使用$.getJSON()
        $.getJSON('https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?', function(data) {
            console.log(data);
        })
    </script>

类操作

JQuery操作类的方法:addClass() removeClass() toggleClass() hasClass()

H5有类似的API:要基于classList的属性,返回元素的类名 add() remove() toggle() contains() 判断类

        var li  = document.querySelector("li:nth-child(2)");
        // console.log(li);
        console.log(li.classList);// 返回元素类名的集合
        // 增加类
        li.classList.add("introl");
        // 移除类
        li.classList.remove("active");
        // 切换类
        li.classList.toggle("a");
        // 判断类
        console.log(li.classList.contains("active"));// 返回布尔值

自定义属性

    <script src="js/jquery-1.12.4.js"></script>
    <script>
        /* 
            自定义属性:data-***(属性名)
            作用:进行数据的缓存
            获取:JQuery方式:对象.data().属性名 || 对象.attr("data-***")
                  H5的方式:对象.dataset--->返回的是属性的集合
            设置:Jquery方式:对象.data("属性名")
                  H5的方式:对象.dataset.属性名 = *** 
        */

        var box = document.querySelector("div");
        // 获取
        console.log(box.dataset);
        console.log(box.dataset.username);
        console.log(box.dataset.ageId);
        console.log(box.dataset["ageId"]);// H5
        console.log($(".box").data().username);// JQuery

        // 设置
        box.dataset.sex = "男";
        console.log(box.dataset.sex);
        console.log($(".box").data().password);
        console.log($(".box").attr("data-username"));
    </script>

多媒体标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <audio controls autoplay src="videos/Taylor Swift - Welcome To New York.mp3"></audio>

    <!-- <video controls src="videos/trailer.mp4"></video> -->
    <video>
        <source src="videos/fun.mp4">
        <source src="videos/1.mp4">
        <source src="videos/trailer.mp4">
    </video>

    <button>播放</button>
    <button>暂停</button>
    <button>快进10秒</button>
    <button>后退10秒</button>
    <button>快速播放</button>
    <button>减速播放</button>
    <button>加大音量</button>
    <button>减小音量</button>
    <button>静音</button>
    <button>全屏</button>

    <script src="js/jquery-1.12.4.js"></script>
    <script>
        var v = $("video")[0];
        $("button").eq(0).click(function() {
            v.play();
        })
        $("button").eq(1).click(function() {
            v.pause();
        })
        $("button").eq(2).click(function() {
            v.currentTime += 10;
        })
        $("button").eq(3).click(function() {
            v.currentTime -= 10;
        })
        $("button").eq(4).click(function() {
            v.playbackRate = 5;
        })
        $("button").eq(5).click(function() {
            v.playbackRate = 0.5;
        })
        $("button").eq(6).click(function() {
            if(v.volume >= 1) {
                v.volume = 1;
            }else {
                v.volume += 0.1;
            }
        })
        $("button").eq(7).click(function() {
            var xx = v.volume - 0.3;
            if(xx <= 0) {
                v.volume = 0;
            }else {
                v.volume = xx;
            }
        })
        $("button").eq(8).click(function() {
            console.log(v.muted);
            if(v.muted) {
                v.muted = false;//开音
            }else {
                v.muted = true;// 静音
            }
        })
        $("button").eq(9).click(function() {
            v.webkitRequestFullScreen();// 有兼容性的问题
        })
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WA终结者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值