创建Ajax基本步骤

1.基本概念

  • AJAX:是一种异步通信的方法,通过直接由 js 脚本向服务器发起 http 通信,然后根据服务器返回的数据,更新网页的相应部分,而不用刷新整个页面的一种方法。
  • XmlHttpRequest (XHR浏览器原生支持):是Ajax实现的一种方式,是一个构造函数,提供了通过 URL 方式来获取数据,只更新网页的一部分数据。
  • Fetch API (浏览器原生支持):XHR可实现的它也可以,除了监控请求速度(文件上传时涉及)
  • 原生不好用,出现了一些第三方库(可以做到原生做到的,原生做不到的它也做不到):Axios(XHR封装)、umi-request(Fetch API封装)

2.XMLHttpRequest 对象的三个常用的属性

  • readyState 属性:存有服务器响应的状态信息

  • 一个 XMLHttpRequest 对象一共有 5 个状态,当它的状态变化时会触发onreadystatechange 函数
xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState == 4) {
        //从服务器的response获得数据
    }
}
  • responseText 属性:可以通过 responseText 属性来取回由服务器返回的数据(字符串)。

3.创建Ajax基本步骤

首先是创建一个 XMLHttpRequest 对象。 然后在这个对象上使用 open 方法创建一个 http 请求,open 方法所需要的参数是请求的方法、请求的地址、是否异步和用户的认证信息。 在发起请求前,我们可以为这个对象添加一些信息和监听函数。比如说我们可以通过 setRequestHeader 方法来为请求添加头信息。我们还可以为这个对象添加一个状态监听函数。一个 XMLHttpRequest 对象一共有 5 个状态,当它的状态变化时会触发onreadystatechange 事件,我们可以通过设置监听函数,来处理请求成功后的结果。当对象的 readyState 变为 4 的时候,代表服务器返回的数据接收完成,这个时候我们可以通过判断请求的状态,如果状态是 2xx 或者 304 的话则代表返回正常。这个时候我们就可以通过 response 中的数据来对页面进行更新了。 当对象的属性和监听函数设置完成后,最后我们调用 send 方法来向服务器发起请求,可以传入参数作为发送的数据体

(1)创建XMLHttpRequest对象

const xhr = new XMLHttpRequest();

(2)设置请求方式

//POST请求
xhr.open('POST',"http://localhost:xxx");

(3)监听响应状态

xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {//当对象的 readyState 变为 4 的时候,代表服务器返回的数据接收完成,这个时候我们可以通过判断请求的状态,如果状态是 200则代表返回正常。
            var obj = document.getElementById(id);
            obj.innerHTML = xhr.responseText;//页面进行更新
        } else {
            alert("AJAX服务器返回错误!");
        }
    }
}

(4)向服务器端发送请求

//POST请求,请求参数在发送请求Send()中.GET的请求参数在请求地址url中
xhr.send("a=100&b=200");

4.ajax 封装

//封装一个ajax请求
function ajax(options) {
    //创建XMLHttpRequest对象
    const xhr = new XMLHttpRequest()
 
    //初始化参数的内容
    options = options || {}
    options.type = (options.type || 'GET').toUpperCase()
    options.dataType = options.dataType || 'json'
    const params = options.data
 
    //发送请求
    if (options.type === 'GET') {
        xhr.open('GET', options.url + '?' + params, true)
        xhr.send(null)
    } else if (options.type === 'POST') {
        xhr.open('POST', options.url, true)
        xhr.send(params)
 
    //监听响应状态
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            let status = xhr.status
            if (status >= 200 && status < 300) {
                options.success && options.success(xhr.responseText, xhr.responseXML)
            } else {
                options.fail && options.fail(status)
            }
        }
    }
}
  • 使用方式:
ajax({
    type: 'post',
    dataType: 'json',
    data: {},
    url: 'https://xxxx',
    success: function(text,xml){//请求成功后的回调函数
        console.log(text)
    },
    fail: function(status){请求失败后的回调函数
        console.log(status)
    }
})
posted @ 2024-05-28 16:54  Frommoon  阅读(8)  评论(0编辑  收藏  举报