javascript原生ajax

发布日期:2017-06-05 阅读量:444

1. 创建过程

   1)创建XMLHttpRequest对象

          var http = new XMLHttpRequest()

   2)通过XMLHttpRequest对象的open方法建立起链接

         http.open(method, url)

   3)通过XMLHttpRequest对象的send方法进行数据传输

         http.send(data)

   4)通过XMLHttpRequest对象的onreadystatechange时间监听服务状态readyState,readyState属性值每次发生改变,onreadystatechange都会被触发

         0:open未调用,1:send未调用,2:send已调用并且已返回响应头和响应状态,3:响应体正在下载,responseText(接收服务端响应的结果)获取到部分的数据, 4:请求过程完全结束

2. 完整实现

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'https://www.baidu.com');
    xhr.send(null);
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4) {
            if(xhr.status >= 200 && xhr.status < 300) {
                console.log('success')
                console.log(xhr.responseText)
            } else {
                console.log('error')
                console.log(xhr.status)
                console.log(xhr.responseText)
            }
        }
    }

3. 封装

    function ajax(options) {
        var type = (options.type || 'GET').toUpperCase();
        var dataType = options.dataType || 'json';
        var data = options.data;
        var xhr = new XMLHttpRequest();
        if (type === 'GET') {
            xhr.open('GET', options.url + '?' + data, true);
            xhr.send(null)
        } else if(type === 'POST'){
            xhr.open('POST', options.url, true);
            xhr.send(data);
        }
        xhr.onreadystatechange = function() {
            if(readyState === 4) {
                if (xhr.status >= 200 && xhr.status < 300) {
                    console.log('success')
                } else {
                    console.log('error')
                }
            }
        }
    }