Ajax 的基本使用

  1. ajax
    1) ajax的作用: 实现网页和服务器之间的数据交互
    2) 网页中请求资源的步骤: 请求——处理——响应。客户端向服务器发送数据请求,服务器对请求进行处理,将处理后的结果响应给客户端。
    3) 请求数据的方式: GET/POST
    4)请求数据的方法:使用XMLHttpRequest 对象(xhr)
    1.1 使用XMLHttpRequest对象实现GET请求
    步骤:
    1) 创建xhr对象
    2)使用open方法设定请求方式和url
    3) 使用send方法发送请求
    4) 监听onreadystatechange
 <script>
        //  1. 创建XMLHttpRequest对象
        var xhr = new XMLHttpRequest();
        // 2. 使用open函数指定访问方式和url
        xhr.open('GET', 'http://liulongbin.top:3006/api/getbooks');
        // 3. 使用send函数发起ajax请求
        xhr.send()
        // 4. 监听onreadyrtatechange事件
        xhr.onreadystatechange = function(){
            // 4.1 监听xhr对象的请求状态,监听服务器的响应状态
            if(xhr.readyState === 4 && xhr.status === 200){
                // 4.2 打印服务器响应回来的数据
                console.log(xhr.responseText);
            }
        }
    </script>

1.2 使用XMLHttpRequest对象实现POST请求
步骤
1) 创建xhr对象
2) 使用open方法指定数据访问类型和url地址
3) 设置Content-Type属性
4) 调用send方法,同时传入数据
5)监听返回结果

 <script>
        // 1. 创建XMLHttpRequest对象
        // 2. 调用open方法
        // 3. 设置content-type属性 固定写法
        // 4. 调用send()函数,同时指定要发送的数据
        // 5. 监听onreadystatechange方法
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'http://liulongbin.top:3006/api/addbook');
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send('bookname=水浒传&author=施耐庵&publisher=出版社名字');
        xhr.onreadystatechange = function(){
            if(xhr.readyState ===4 &&xhr.status === 200){
                console.log(xhr.responseText);
            }
        }
    </script>

1.3 JSON
定义:JSON(javascript Object Notation),其本质是javascript的对象和数组的字符串表示
地位:JSON已经称为了主流的数据交互格式
作用:在计算机和网络之间传输数据
1.3.1 JSON的两种结构
1) 数组结构
2) 对象结构
1.3.2 JS和JSON之间的互相转化
1)序列化 将js-> JSON 使用JSON.stringfy()
2)反序列化 将JSON->js 使用JSON.parse()
1.4 XMLHttpRequest Level 2 新特性
1.4.1 新功能1——设置http的请求事件

var xhr = new XMLHttpRequest()
xhr.timeout = 3000   //设定请求时间
//请求超时后触发的函数
xhr.ontimeout = function(event){
    consloe.log('超时了')
}

1.4.2 新功能——FormData对象管理表单数据

 <script>
        //创建FormData对象
        var fd = new FormData();
        //加入属性
        fd.append('uname', 'rain');
        fd.append('psw', '123');
        // 创建xhr
        var xhr = new XMLHttpRequest();
        xhr.open('POST', URL地址)
        xhr.send(fd);
    </script>

2) FormData直接获取网页表单的值

<body>
    <form id="form"></form>
    <script>
        // 获取form元素
        var form = document.querySelector('#form');
        // 监听提交事件
        form.addEventListener('submit', function(e){
            // 阻止默认提交事件
            e.preventDefault()
            // 根据form表单创建FormData对象
            //创建FormData对象
            var fd = new FormData(form);

            // 创建xhr
            var xhr = new XMLHttpRequest();
            xhr.open('POST', URL地址)
            xhr.send(fd);

            ...
        })

    </script>

1.4.3 新功能3——上传文件
步骤:
1) 定义UI结构
2) 判断是否上传了文件
3) 向ForData中追加文件
4) 发送上传文件请求
5)监听onreadtstatechange事件

第一步

<!-- 定义ui结构 -->
    <input type="file" id="files" />
    <button id='btnupload'>上传</button>
    <img src="" alt="" id='imgs' width="800" />

第二步

 // 判断是否上传了文件
        var btn = document.querySelector('#btnupload');

        btn.addEventListener('click', function () {
            var file = document.querySelector('#files').files
            if (file.length <= 0) {
                alert('请上传文件');
            } else {
                 // 成功后的系列操作
            }
        })

第三步

// 判断是否上传了文件
        var btn = document.querySelector('#btnupload');

        btn.addEventListener('click', function () {
            var file = document.querySelector('#files').files
            if (file.length <= 0) {
                alert('请上传文件');
            } else {
                 // 第三步向ForData中追加文件
                  var xhr = new XMLHttpRequest();
                  var fd = new FormData();
                  // 讲文件添加到FormData中,key,value
                  fd.append('avatar', file[0]);
            }
        })

第四步

// 判断是否上传了文件
        var btn = document.querySelector('#btnupload');

        btn.addEventListener('click', function () {
            var file = document.querySelector('#files').files
            if (file.length <= 0) {
                alert('请上传文件');
            } else {
                 // 第三步向ForData中追加文件
                  var fd = new FormData();
                  // 讲文件添加到FormData中,key,value
                  fd.append('avatar', file[0]);
                  
                  //第四步
                  var xhr = new XMLHttpRequest();
                  xhr.open('POST', 'http://liulongbin.top:3006/api/avatar');
                  xhr.send(fd);
            }
        })

第五步

// 判断是否上传了文件
        var btn = document.querySelector('#btnupload');

        btn.addEventListener('click', function () {
            var file = document.querySelector('#files').files
            if (file.length <= 0) {
                alert('请上传文件');
            } else {
                 // 第三步向ForData中追加文件
                  var fd = new FormData();
                  // 讲文件添加到FormData中,key,value
                  fd.append('avatar', file[0]);
                  
                  //第四步
                  var xhr = new XMLHttpRequest();
                  xhr.open('POST', 'http://liulongbin.top:3006/api/avatar');
                  xhr.send(fd);
                  
                  //第五步
                  xhr.onreadystatechange = function () {
                    if (xhr.readyState === 4 && xhr.status === 200) {
                        var data = JSON.parse(xhr.responseText)
                        if(data.status === 200){ //上传文件成功
                            document.querySelector('#imgs').src = 'http://www.liuongbin.top:3006' + data.url
                        }else{
                            console.log(data.message);
                        }
                    }
                    }
            }
        })

1.4.4 新功能4——显示上传进度

// 创建xhr对象
        var xhr = new XMLHttpRequest()
        // 监听xhr.upload的onprogress事件
        xhr.upload.onprogress = function(e){
            // e.lengthComputable是一个布尔值,表示当前上传资源是否具有可计算的长度
            if(e.lengthComputable){
                // e.loaded 表示已传输的字节
                // e.total 表述需要传输的字节
                var percentcomplete = Math.ceil((e.loaded / e.total) *100)
            }
        }
  1. jQuery提供的Ajax
    使用XMLHttpRequest 实现数据交互的方式太过于复杂,jQuery对其进行了封装,使用更加便捷
    2.1 $.get()方法
$.get(url, data, callback)  //data和callback可以省略

2.2 $.post() 方法

$.post(url, data, callback)  //只有callback可以省略

2.3 $.ajax()

$.ajax({
    type: ''   //数据访问类型
    url: ''    // 访问地址
    data: { }  //传输数据
    success: function(res) //成功后的callback,res是返回的数据
})

笔记跟随:https://www.bilibili.com/video/BV1zs411h74a?p=53

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值