ajax请求

ajax实现的步骤

1.创建xhr[XmlHttpRequest]对象 var xhr = new XMLHttpRequest();

2.配置请求信息 xhr.open("get|post","url",false/true);

3.发送请求 xhr.send();

4.判断请求是否发送成功发

if(http_request.readyState==4 && http_request.status==200){}

onreadystatechange (用于异步)属性定义当 readyState 发生变化时执行的函数

|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
| 属性 | 描述 |
| onreadystatechange | 定义了当 readyState 属性发生改变时所调用的函数。 |
| readyState | 保存了 XMLHttpRequest 的状态。 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 正在处理请求 4: 请求已完成且响应已就绪 |
| status | 200: "OK" 403: "Forbidden" 404: "Page not found"如需完整列表,请访问 Http 消息参考 |
| statusText | 返回状态文本(例如 "OK" 或 "Not Found") |

把字符串转化为json格式: var json=JSON.parse(str);

ajax的请求方式

get同步请求

javascript 复制代码
 //get同步请求
 function getsync(url,params,okfun,errfun){
    if (window.XMLHttpRequest) {
        var xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        var xhr = new ActiveXObject
            ("Microsoft.XMLHTTP");
    }
    
    xhr.open('get',url+'?'+params,false);
    xhr.send();
    if(xhr.status == 200 && xhr.readyState == 4){
    okfun(xhr.responseText);
    }else{
        errfun("wrong")
    }
 }

get异步请求

javascript 复制代码
//get异步请求
 function getasync(url,params,okfun,errfun){
    if (window.XMLHttpRequest) {
        var xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        var xhr = new ActiveXObject
            ("Microsoft.XMLHTTP");
    }
    xhr.open('get',url+'?'+params,true);
    xhr.send();
    xhr.onreadystatechange=function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                okfun( xhr.response);
            } else{
                errfun('error')
            }
        }
    }
 }

post同步请求

javascript 复制代码
 //post的同步请求
 function postsync(url,params,okfun,errfun){
    if (window.XMLHttpRequest) {
        var xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        var http_request = new ActiveXObject
            ("Microsoft.XMLHTTP");
    }
    xhr.open('post',url ,false);
    //设置请求头
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xhr.send(params);
    
    if(xhr.status==200 && xhr.readyState==4){
               okfun(xhr.responseText);  
        }else{
            errfun("error");
        }
     
 }

post异步请求

javascript 复制代码
//post的异步请求
 function postasync(url,params,okfun,errfun){
    if (window.XMLHttpRequest) {
        var xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        var http_request = new ActiveXObject
            ("Microsoft.XMLHTTP");
    }
    xhr.open('post',url ,true);
    //设置请求头
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xhr.send(params);
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4){
            if(xhr.status==200){
                okfun(xhr.response)
            }else{
                errfun('error');
            }
        }
    }
 }

懒加载

懒加载也叫延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式

懒加载的优点

1.提升用户体验,加快首屏渲染速度

2.减少无效资源的加载

3.防止并发加载的资源过多会阻塞js的加载

懒加载的原理:

首先将页面上的图片的 src 属性设为空字符串,而图片的真实路径则设置在 data-original 属性中,当页面滚动的时候需要去监听 scroll 事件,在 scroll 事件的回调中,判断我们的懒加载的图片是否进入可视区域,如果图片在可视区内则将图片的 src 属性设置为 data-original 的值,这样就可以实现延迟加载。

html 复制代码
<style>
    .goods{
        width: 300px;
        height: 200px;
        border: 1px solid #f00;
    }
    img{
        width: 100px;
    }
</style>
<script src="./xiaomi-data.js"></script>
<div id="content"></div>
<script>
    var miData = data.data;
    var str = '';
    var cont = document.getElementById('content');
    function loadInitData(){
        for(var i=0;i<miData.length;i++){
            str += `<div class="goods"><img src="./img-placeholder.png" alt="" data-src="${miData[i].info.image}">                
            <div>价格:${miData[i].info.price}</div>                 
            <div>销量:${miData[i].info.comments}</div>                
            <div>${miData[i].info.name}</div>             
            </div>`;
         }
         cont.innerHTML += str;
    }

    // 页面初始化时,判断图片的加载时机
    function loadImg(){
        var imgList = cont.getElementsByTagName('img');
        var top;
        // 页面的高度
        var winHeight = document.documentElement.clientHeight;
        for(var i=0;i < imgList.length;i++){
            // 获取图片距离页面顶端的偏移值
            top = imgList[i].offsetTop;
            if(top <= winHeight){
                // 加载图片:把data-src中的数据放在src中
                console.log('加载第一幅图片',top,winHeight);
                imgList[i].src = imgList[i].dataset.src;
            }
        }
    }
    function onScroll(){
        window.onscroll = function(){
            var scrollTop = document.documentElement.scrollTop;
            var winHeight = document.documentElement.clientHeight;
            var imgList = cont.getElementsByTagName('img');
            var top;
            // 页面的高度
            var winHeight = document.documentElement.clientHeight;
            for(var i=0;i < imgList.length;i++){
                // 获取图片距离页面顶端的偏移值
                top = imgList[i].offsetTop;
                if(winHeight + scrollTop >= top){
                    imgList[i].src = imgList[i].dataset.src;
                }
            }
        }
    }
    loadInitData();
    loadImg()
    onScroll()
</script>
相关推荐
程序员拂雨1 分钟前
Angular 知识框架
前端·javascript·angular.js
GoodStudyAndDayDayUp31 分钟前
gitlab+portainer 实现Ruoyi Vue前端CI/CD
前端·vue.js·gitlab
程序员阿明37 分钟前
vite运行只能访问localhost解决办法
前端·vue
前端 贾公子39 分钟前
uniapp -- 验证码倒计时按钮组件
前端·vue.js·uni-app
zhengddzz41 分钟前
从卡顿到丝滑:JavaScript性能优化实战秘籍
开发语言·javascript·性能优化
淡笑沐白1 小时前
AJAX技术全解析:从基础到最佳实践
前端·ajax
Go_going_1 小时前
ajax,Promise 和 fetch
javascript·ajax·okhttp
龙正哲1 小时前
如何在Firefox火狐浏览器里-安装梦精灵AI提示词管理工具
前端·firefox
徐徐同学1 小时前
轻量级Web画板Paint Board如何本地部署与随时随地在线绘画分享
前端
LuckyLay1 小时前
Vue百日学习计划Day4-8——Gemini版
前端·vue.js·学习