原生js实现ajax及get post方法

作者: 前端沐先生 | 来源:发表于2017-05-26 10:42 被阅读157次

@拭目以待:首发于原生js实现ajax及get post方法

ajax原生实现,含 post与get方法。原码如下:

/*
 * ajax
 * type === GET: data格式 name=baukh&age=29
 * type === POST: data格式 { name: 'baukh', age:29 }
 * 与 jquery 不同的是,[success, error, complete]返回的第二个参数, 并不是返回错误信息, 而是错误码
 * */
var extend = require('./extend');
var utilities = require('./utilities');
function ajax(options) {
    var defaults = {
        url: null,// 请求地址
        type: 'GET',// 请求类型
        data: null,// 传递数据
        headers: {},// 请求头信息
        async: true,// 是否异步执行
        beforeSend: utilities.noop,// 请求发送前执行事件
        complete: utilities.noop,// 请求发送后执行事件
        success: utilities.noop,// 请求成功后执行事件
        error: utilities.noop// 请求失败后执行事件
    };
    options = extend(defaults, options);
    if (!options.url) {
        utilities.error('jTool ajax: url不能为空');
        return;
    }
    var xhr = new XMLHttpRequest();
    var formData = '';
    if (utilities.type(options.data) === 'object') {
        utilities.each(options.data, function (key, value) {
        if(formData !== '') {
            formData += '&';
        }
        formData += key + '=' + value;
        });
    }else {
        formData = options.data;
    }
    if(options.type === 'GET' && formData) {
        options.url = options.url + (options.url.indexOf('?') === -1 ?  '?' : '&') + formData;
        formData = null;
    }
    xhr.open(options.type, options.url, options.async);
    for (var key in options.headers) {
        xhr.setRequestHeader(key, options.headers[key]);
    }
    // xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    // 执行发送前事件
    options.beforeSend(xhr);
    // 监听onload并执行完成事件
    xhr.onload = function() {
        // jquery complete(XHR, TS)
        options.complete(xhr, xhr.status);
    };
    // 监听onreadystatechange并执行成功失败事件
    xhr.onreadystatechange = function() {
    if (xhr.readyState !== 4) {
        return;
    }
    if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
        // jquery success(XHR, TS)
        options.success(xhr.response, xhr.status);
    } else {
    // jquery error(XHR, TS, statusText)
        options.error(xhr, xhr.status, xhr.statusText);
    }
    };
    xhr.send(formData);
}
function post(url, data, callback) {
    ajax({ url: url, type: 'POST', data: data, success: callback });
}
function get(url, data, callback) {
    ajax({ url: url, type: 'GET', data: data, success: callback });
}
module.exports = {
    ajax: ajax,
    post: post,
    get: get
};

代码中调用了 extendutilities类,如果想了解更多,请关注 jTool

@拭目以待

个人站点:www.lovejavascript.com
表格管理插件:gridmanager.lovejavascript.com && github地址
QQ交流群 (452781895):How To Make Love
微信公众账号:loveJavascript

《野生前端工程师》专辑中所有文章均为@拭目以待 原创,转载请注明出处。

相关文章

  • 原生js实现ajax及get post方法

    @拭目以待:首发于原生js实现ajax及get post方法 ajax原生实现,含 post与get方法。原码如下...

  • 原生js实现Ajax

    原生js实现Ajax方法:var Ajax={get: function(url, fn) { var xhr =...

  • Ajax原生GET ,POST, Ajax+Promise

    最近写单页demo,没有用到前端框架和js库,需要ajax原生get方法 post方法 Ajax 和 Promise异步

  • ajax原生兼容

    总结一下JavaScript原生ajax写法 有get和post两种方法,写法差异不大 POST方法: GET方法

  • Ajax的使用方法

    Ajax 一、 javaScript原生使用Ajax 1.get方法 2.post方法 open()方法后面的参数...

  • jQuery中的Ajax

    原生的Ajax Ajax之load Ajax之$.get() get与post方式的区别:1.安全性。post的安...

  • 实现异步请求的方法

    原生ajax写法: 请求方式:get,post,head,delete,get和post的区别 get将请求的参数...

  • ajax总结

    18.3.23·AJAX概念简述、内部实现原理 ·常用方法:load()、$.get()、$.post()、$.g...

  • JS杂记

    JS中$含义及用法 js发送get 、post请求的方法简介

  • ajax学习

    1、废话不多说,直接上代码演示:创建基本的ajax的get请求的原生js代码。 创建基本的ajax的post请求的...

网友评论

    本文标题:原生js实现ajax及get post方法

    本文链接:https://www.haomeiwen.com/subject/wkitfxtx.html