一文带你彻底搞懂AJAX和前后端数据交互!

134 阅读2分钟

一、AJAX到底是干嘛的?

你有没有遇到过这种情况:点个按钮,网页内容就变了,但页面却没刷新?这背后其实就是AJAX在默默帮忙。AJAX让前端和后端像发微信一样随时沟通,用户体验一下子就高级了。


二、AJAX的两种常用写法

1. XMLHttpRequest(XHR)

XHR是“老前辈”,用起来有点啰嗦,但兼容性好。比如我们要获取一组歌手信息:

function getData() {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open('GET', 'https://mock.mengxuegu.com/mock/xxx/songer/songer', true);
        xhr.send();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                let data = JSON.parse(xhr.responseText);
                resolve(data.data);
            }
        }
    })
}

配合按钮和渲染函数,点一下就能看到新数据:

btn.addEventListener('click', () => {
    getData().then(arr => renderList(arr));
});

2. fetch(新宠)

fetch是“新生代”,语法更简单,直接支持Promise:

btn.addEventListener('click', () => {
    fetch('https://mock.mengxuegu.com/mock/xxx/songer/songer?page=1')
        .then(response => response.json())
        .then(data => {
            console.log(data);
        });
});

三、AJAX的工作流程其实很像点外卖

  1. 你(前端)下单(发请求)
  2. 商家(后端)接单做饭(处理请求)
  3. 外卖小哥(网络)把饭送到你手里(返回数据)
  4. 你吃饭(页面更新)

整个过程,页面都不用刷新,体验非常丝滑。


四、AJAX常见小技巧

  • 异步不阻塞:AJAX不会卡住页面,用户可以边点边看。
  • Promise链式处理:配合Promise,代码更清晰,出错也好找。
  • 动态渲染:拿到数据后,直接用JS生成HTML,页面内容随时变。
function renderList(arr) {
    let list = document.getElementById('list');
    list.innerHTML = '';
    arr.forEach(item => {
        let li = document.createElement('li');
        li.innerText = `${item.name} -- ${item.songsCount}`;
        list.appendChild(li);
    });
}

五、fetch和XHR怎么选?

  • 新项目、喜欢简洁就用fetch
  • 老项目、要兼容IE就用XHR

其实大多数时候,fetch已经能满足绝大部分需求了。


六、AJAX能做什么?

  • 搜索联想:你打字,页面自动给建议
  • 分页加载:下拉自动加载更多
  • 表单异步提交:不用刷新就能提交
  • 单页应用:页面切换数据实时更新

七、最后聊两句

AJAX其实没那么神秘,就是让网页和服务器能随时“聊聊天”。学会AJAX,你的网页就能变得更灵活、更有趣。别怕,多写几遍,慢慢你就会发现,原来“无刷新”也能很简单!