学习 Ajax:如何使用 JavaScript 实现页面局部更新

554 阅读3分钟

在 JavaScript 中,Ajax(Asynchronous JavaScript and XML)是一种用于在后台与服务器进行异步通信的技术。它允许在不刷新整个页面的情况下,通过发送 HTTP 请求和接收服务器返回的数据,实现局部更新页面内容的功能。

通过 Ajax,可以实现以下功能:

  • 异步加载数据:可以使用 Ajax 请求从服务器获取数据,然后在页面上进行动态展示,而无需刷新整个页面。这在处理大量数据或需要频繁更新数据的场景中非常有用。
  • 表单提交:可以使用 Ajax 将表单数据以异步方式发送到服务器,然后根据服务器返回的响应进行相应的处理,而无需页面刷新。
  • 动态内容更新:可以使用 Ajax 获取最新的数据,并将其插入到页面中的特定位置,从而实现动态内容的更新。

在 JavaScript 中,可以通过原生的 XMLHttpRequest 对象来实现 Ajax 请求,也可以使用更高级的封装库(如 jQuery 的 $.ajax() 方法、axios、fetch 等)来简化 Ajax 请求的操作。这些封装库提供了更方便的方法和更好的跨浏览器兼容性。

使用原生 XMLHttpRequest 对象发送 Ajax 请求

以下是一个使用原生 XMLHttpRequest 对象发送 Ajax 请求的示例:

<button id = "btn">获取新歌</button>
<ul id='ul'>
   
</ul>

<script>
    let btn = document.getElementById('btn')
    btn.addEventListener('click',() =>{
        //发送一个http请求
        let xhr = new XMLHttpRequest()
        xhr.open('GET','http://192.168.31.26:3000/top/song?type=7',true)
        xhr.onreadystatechange = () =>{
            if(xhr.readyState === 4 && xhr.status === 200){
                // console.log(JSON.parse(xhr.responseText)); //响应体
                const result = JSON.parse(xhr.responseText).data
                for(let key in result){
                    // result[key].name
                    const li = document.createElement('li') //动态创建DOM结构
                    li.innerText = result[key].name
                    document.getElementById('ul').appendChild(li)
                }
            }
        }
        xhr.send()
    })
</script>
  1. 首先,通过let btn = document.getElementById('btn')获取id为"btn"的按钮元素。
  2. 然后,通过btn.addEventListener('click',() => { ... })给按钮添加了一个点击事件的监听器。也就是说,当按钮被点击时,会执行后面的箭头函数中的代码。
  3. 在点击事件的处理函数中,首先创建了一个新的XMLHttpRequest对象,即let xhr = new XMLHttpRequest()。XMLHttpRequest对象用于在后台与服务器交换数据,可以在不重新加载整个页面的情况下更新页面的部分内容。
  4. 调用xhr.open('GET',''http://192.168.31.26:3000/top/song?type=7' ',true)方法初始化一个新的请求。这里指定了请求的方式为GET,请求的URL为('http://192.168.31.26:3000/top/song?type=7' ) ,这里我们要注意,由于浏览器的安全策略限制,Ajax 请求只能与同源的 URL 进行通信,或者使用 CORS(跨域资源共享)进行跨域请求。最后一个参数指定为true表示使用异步请求。这意味着页面会在等待服务器响应的同时继续执行其他脚本,而不会被阻塞。
  5. 接下来通过xhr.onreadystatechange方法设置一个回调函数,用于监听XMLHttpRequest对象的状态变化。当状态发生变化时,该回调函数会被调用。
  6. 在回调函数中,首先检查了XMLHttpRequest对象的状态和HTTP状态码是否符合预期,即if(xhr.readyState === 4 && xhr.status === 200)。如果满足条件,表示请求已经完成且成功返回,可以处理服务器返回的数据。
  7. 解析服务器返回的响应体,将其转换为JSON格式:const result = JSON.parse(xhr.responseText).data。这里假设服务器返回的是JSON格式的数据,通过JSON.parse方法将其解析为JavaScript对象。
  8. 遍历解析后的结果,动态创建li元素,并将歌曲名称作为li元素的文本内容。这部分代码通过for...in循环遍历result对象的属性,并为每个歌曲创建一个li元素,然后将其添加到无序列表中。
  9. 最后,调用xhr.send()方法发送HTTP请求。这会触发之前设置的onreadystatechange回调函数,从而实现异步请求的处理和数据更新。

当用户点击按钮时,页面会执行JavaScript代码,通过Ajax技术向指定URL发送GET请求,获取服务器返回的数据,实现在页面上动态显示这些数据的功能。

使用 jQuery 的 $.ajax() 方法发送 AJAX 请求

这段代码是一个使用 jQuery 的 $.ajax() 方法发送 AJAX 请求的示例:

<button id = "btn">获取新歌</button>
<ul id='ul'>
   
</ul>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
    let btn = document.getElementById('btn')
    btn.addEventListener('click',() =>{
        $.ajax({
            url:'http://192.168.31.26:3000/top/song?type=7',
            method:'GET',
            dataType:'JSON',
            success: (res) =>{
                console.log(res);
            }
            
        })
    })
</script>
  1. 首先我们引入了 jQuery 库文件,这里使用了公共 CDN 服务提供的链接。
  2. 之后我们在script标签里定义了一个 btn 变量,用来获取一个 ID 名称为 btn 的 HTML 元素。
  3. 然后给 btn 元素添加了一个点击事件监听器,当按钮被点击时会执行回调函数。
  4. 在回调函数中,使用了 jQuery 提供的 .ajax()方法,在.ajax() 方法,在 .ajax() 方法中,首先指定了请求 URL,即 http://192.168.31.26:3000/top/song?type=7 ,这里使用了 GET 方法。
  5. 然后指定了 dataType 为 JSON,表示期望从服务器返回的数据类型为 JSON 格式。
  6. 在请求成功后,会执行 success 回调函数,该函数会接收一个参数 res,表示从服务器返回的响应结果。在这个示例中,使用了 console.log() 方法将 res 输出到控制台中。

使用Fetch API进行网络请求

Fetch API是一种现代的网络请求API,用于替代传统的XMLHttpRequest对象,相较于传统的Ajax更加简洁和易用

<button id = "btn">获取新歌</button>
<ul id='ul'>
   
</ul>

<script>
    let btn = document.getElementById('btn')
    btn.addEventListener('click',() =>{
        fetch('http://192.168.31.26:3000/top/song?type=7')
        .then((data) => {
            return data.json()
        })
        .then((res) =>{
            console.log(res);
        })
    })
</script>

实现过程如下:

  1. 首先,通过let btn = document.getElementById('btn')获取id为"btn"的按钮元素。
  2. 然后,通过btn.addEventListener('click',() => { ... })给按钮添加了一个点击事件的监听器。也就是说,当按钮被点击时,会执行后面的箭头函数中的代码。
  3. 在点击事件的处理函数中,使用Fetch API发送了一个GET请求到指定URL,即fetch('http://192.168.31.26:3000/top/song?type=7')。
  4. Fetch函数返回一个Promise对象,可以通过.then()方法处理请求成功后的响应。在这段代码中,使用第一个.then()方法对返回的Response对象进行处理。
  5. 在第一个.then()方法中,使用箭头函数(data) => { return data.json() }对响应的数据进行处理。通过调用data.json()方法,将Response对象的响应体解析为JSON格式,返回一个新的Promise对象。
  6. 接下来,使用第二个.then()方法处理解析后的JSON数据。在这段代码中,使用箭头函数(res) => { console.log(res); }来打印解析后的数据到控制台。

这三种方法可以根据自己实际需要去选择。

今天的内容到这就结束啦,欢迎下次再来一起学习ヾ(◍°∇°◍)ノ゙!!