原生Js封装Ajax

loadmore-ajax.PNG
  • 这是一个点击加载更多的插件,点击more按钮,请求ajax,将依次加载3条数据
  • html由一个ul和一个button组成
  1. 首先,获取dom节点,分别获取列表和按钮
var more = document.getElementsByClassName("more")[0],                         // more按钮
    contents = document.getElementsByClassName("contents")[0];                // 列表
  1. 监听more的点击事件,点击按钮则发送ajax获取数据,所以下面来封装ajax,发送ajax的步骤可以理解为:创建异步对象-连接服务器-发送请求-接受返回值
// 封装创建异步对象
function createXHR(){
    // 该对象用于在后台与服务器交换数据,IE7+及其他浏览器都支持
    var xhr = new XMLHttpRequest();
    try{
        xhr = new XMLHttpRequest();
    }catch (error){
        try{
            // 兼容老版本的IE5、IE6
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }catch (error){
            xhr = null;
        }
    }
    return xhr;
}
  1. 下面创建一个名为ajax的函数,在这里面处理参数和发送请求
function ajax(opts){
  // opts参数即请求对象,包括的请求链接、请求方式及参数
  // 创建异步对象
  var xhr = createXHR();
}
  1. 在发送ajax请求前,我们先需要处理下参数,也就是要告诉服务器从第几条开始返回数据和返回几条数据,在调用ajax函数时会给2个参数:startnum以键值对形式保存在参数的data属性中
// 处理参数,将参数转换成 key=value 的形式
var dataStr = "";
for(var key in opts.data){
    dataStr += key + "=" + opts.data[key] + "&";
}
// 去掉字符串末尾的&符号
dataStr = dataStr.substr(0,dataStr.length-1);
  1. 处理好参数后,再判断发送ajax时使用的是get请求还是post请求,分别针对这2种请求方式:
// open()的参数分别表示:请求方式,请求地址
// true表示异步请求
if(opts.type.toLowerCase() == "get"){
    // get请求直接通过?将请求参数拼接在url后面即可
    xhr.open(opts.type,opts.url + "?" + dataStr,true);
    xhr.send();
}
if(opts.type.toLowerCase() == "post"){
    xhr.open(opts.type,opts.url,true)
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // post请求直接将请求参数写在send方法里
    xhr.send(dataStr);
  1. 确定好请求方式后,便会发送请求了,这时会触发一个onreadystatechange函数
xhr.onreadystatechange = function(){
    // xhr.readyState == 4  请求已完成(请求可能失败也可能成功)
    // xhr.status == 200  请求成功
    // xhr.status == 304  请求成功并且请求条件较上一次并没有改变
    if( xhr.readyState == 4 && ( xhr.status == 200 || xhr.status == 304 ) ){
        var json = JSON.parse(xhr.responseText)
        opts.success(json);
    }else if( xhr.readyState == 4 && xhr.status == 404 ){
        opts.error();
    }
}
  1. 封装好ajax之后,就可以使用啦
// 监听按钮的点击事件
more.addEventListener('click',function(){
    // 计算出开始项,传给服务器告诉他从第几条开始
    var start = (contents.children).length + 1;
    // 调用ajax函数
    ajax({
        url: "./loadmore.php",
        type: "get",
        data: {
            start:start,
            num: 3
        },
        success: function(ret){
            // 获取到返回的数据后拼接dom
            contents.innerHTML += ret.msg;
        },
        error: function(){
            console.log('error');
        }
    })
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • // ajax操作 /*options = { type : "get|post", // 请求方式,默认 "ge...
    蓝色木头阅读 347评论 0 0
  • 需求分析前段(part 0)确定产品目标:明确需求上下文,针对哪些市场,哪些人群,哪些场景等 互联网产品更加注重人...
    张华_94d7阅读 289评论 0 0
  • 是誰 像晨曦的陽光般 給我帶來光亮 是誰 像烈日的太陽 把我曬傷 溫柔的力量 強大 足以喚醒 所有沉睡的黑暗 烈日...
    蔡振源阅读 215评论 0 2
  • RELATIONSHIP 人 际 关 系——一切烦恼都是人际关系的烦恼。 “一切烦恼都是人际关系的烦恼”,起初看到...
    唐果Candy阅读 392评论 1 2