Promise+ajax && async+await+promise+ajax

本文介绍了一个使用Promise结合Ajax实现异步请求的例子,并演示了如何利用async/await简化异步操作流程。通过具体代码展示了如何创建XMLHttpRequest对象进行GET请求,并处理响应数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Promise+Ajax

//创建XHR对象
function creatXHR() {
    var xhr;
    if(window.XMLHttpRequest){
            xhr = new window.XMLHttpRequest();
    }else if(window.ActiveXObject('MicrosoftXMLHTTP')){
            xhr = new ActiveXObject();
    }else{
            console.log('your brower can not support XMLHttpRequest');
    }
    return xhr;
}

function getAjax(url) {
    var xhr = creatXHR();
    return new Promise(function (resolve,reject) {
        xhr.onreadystatechange = function () {
            if(xhr.readyState == 4){
                if(200 <= xhr.status <= 304){
                    resolve(xhr.responseText);
                }else{
                     reject('error reject');
                }
            }
        };
        xhr.open('GET',url);
        xhr.send(null);
        });
}
getAjax('data.js').then(function (msg) {
    console.log(msg);
});

async+await+promise+ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="scriptText"></div>
<script>
    var url = 'http://o4j806krb.qnssl.com/public/index.min.aeb155e1.min.js';
    var xhr = new XMLHttpRequest();
    var text;
    function getScript(url) {
        return new Promise(function (resolve,reject) {
            xhr.onreadystatechange = function () {
                if(xhr.readyState === 4 && xhr.status === 200){
                    text = xhr.responseText;
                    resolve(xhr.responseText);
                }
            };
            xhr.open('GET',url);
            xhr.send(null);
        });


    }
   var processMessage =  function(url) {
        var ele = document.getElementsByClassName('scriptText')[0];
          getScript(url).then(function () {
            ele.innerHTML = text;
        });
    };
    var processMessageAsync =  async function(url) {
        var ele = document.getElementsByClassName('scriptText')[0];
        await getScript(url);//await必须在async环境中
        ele.innerHTML = text;
    };
    processMessage(url);//这里测试不用async时的情况,页面显示undefined
    setTimeout(function () {
        processMessageAsync(url);//3s后页面显示获取到的内容
    },3000);
//上面ajax能跨域获取数据的原因是o4j806krb.qnssl.com服务器将其资源的CORS设置为acces-control-allow-origin为*
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值