javascript——通过手写来学习Ajax

143 阅读2分钟

Ajax是一种用于创建快速动态网页的技术。它是一个和业务相关的问题,是一个异步获取数据的任务。我们可以通过 jax,可以实现在不影响用户交互的情况下,向服务器发送请求并获取数据,然后使用JavaScript动态更新页面内容。

这篇文章就是为大家来介绍如何手写一个Ajax。

手写一个Ajax来获取数据

手写一个Ajax主要需要解决的就是异步变同步的问题。下面是手写Ajax的具体步骤。

  1. 定义一个 fetchJSONData 函数,该函数接受一个URL参数。
const fetchJSONData = function(url){}
  1. 在函数内部,我们创建了一个Promise实例。
const fetchJSONData = function(url){
return new Promise((resolve, reject) => {}
}
  1. 在异步执行器函数中,我们创建了一个XMLHttpRequest实例。
const fetchJSONData = function(url){
            //  在开始的时候状态为pending
            return new Promise((resolve, reject) => {
                // 执行器
                // 耗时任务的容器
                console.log('开始写ajax');
                const xhr = 
                XMLHttpRequest 
                ? new XMLHttpRequest() 
                :new ActiveXObject('Microsoft.XMLHTTP');
        };
  1. xhr.onreadystatechange 回调函数中来判断请求状态。
const fetchJSONData = function(url){
            //  在开始的时候状态为pending
            return new Promise((resolve, reject) => {
                // 执行器
                // 耗时任务的容器
                console.log('开始写ajax');
                const xhr = 
                XMLHttpRequest 
                ? new XMLHttpRequest() 
                :new ActiveXObject('Microsoft.XMLHTTP');
            xhr.open('GET',url,false)
            //宏任务 事件
            xhr.onreadystatechange=function(){
                if(xhr.readyState !==4) return 
                //当请求状态为 `4` 时,说明请求已经完成。
                if(xhr.status ===200||xhr.status===304){
                    reslove(xhr.responseText);
                //如果请求成功,状态码为 `200` 或者 `304`,
                那么我们使用 `resolve()` 函数将返回的数据传递给 Promise 实例
                }else{
                    reject(new Error(xhr.responseText))
                //否则,请求失败,我们使用 reject() 函数将错误信息传递给 Promise 实例。
                }
            }
            xhr.send();
                // setTimeout(() => {
                // resolve('xxxx')
                // }, 1000);
            })
        };
  1. 使用该函数获取数据,并使用await关键字将异步代码转化为同步代码。
 (async function(){
            const p = fetchJSONData('https://icbib2-home.site.laf.run/')
            console.log('');
            console.log(p);
            const res = await p;
            console.log(p);
        })()

总结

Ajax可以在不刷新整个页面的情况下,向服务器发送请求并获取数据。这使得网页能够实现动态更新,提高用户体验和页面性能。通过Ajax,可以实现实时更新数据,例如聊天应用中的消息刷新、社交媒体中的动态加载等。用户可以在不刷新页面的情况下,与服务器进行交互。Ajax技术使得网页能够实现动态、交互性和异步加载的功能,提升了用户体验,并且减少了不必要的页面刷新,提高了页面性能。

通过对Ajax进行手写可以帮助我们更好的来理解和运用Ajax。