ajax封装

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax封装相关的知识,希望对你有一定的参考价值。

周日在家封装了ajax简单的函数。

1、封装extand方法

  模仿(抄袭)jQuery源码的$.extend方法,可以在使用ajax时候少传一些参数。

  

Function.prototype.method = function(name, func) {
    this.prototype[name] = func;
    return this;
};

var $ = function() {
    
}
.method(‘extend‘, function() {
    var options, name, copy,
        target = {},
        i = 1,
        length = arguments.length;

    for ( ; i < length; i++ ) {
        options = arguments[i];
        for ( name in options ) {
            copy = options[name];
            target[name] = copy;
        };
    }
    return target;
})

2、有了extend方法之后,就是ajax方法了

 

.........
 .method(‘ajax‘, function(opts) {
    var xhr = new XMLHttpRequest(),
    self = this,
    ajaxSettings = {
        url: location.href,
        type: "GET",
        async: true,
        contentType: "application/x-www-form-urlencoded",
        data: null
    },
    ajaxOpts = this.extend({}, ajaxSettings, opts),
    success = ajaxOpts.success;
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4 && xhr.status === 200) {
            var res = JSON.parse(xhr.responseText);
            if(res.success) {
                data = res.data || {};
                success && success.call(self, data);
            }
        }
    };
    xhr.open(ajaxOpts.type, ajaxOpts.url, !!ajaxOpts.async);
    xhr.setRequestHeader("Content-type", ajaxOpts.contentType);
    xhr.send(JSON.stringify(ajaxOpts.data));
    return this;
})

这样的话,ajax方法就已经封装好了。

 

但是有一些问题,现在angular,jQuery 都支持$ajax().success 或者 $ajax().done的连缀写法,我至今还没想好怎么实现,难道是用ES6的promise函数吗??>

以上是关于ajax封装的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。

AJAX相关JS代码片段和部分浏览器模型

回归 | js实用代码片段的封装与总结(持续更新中...)

通用封装ajax代码

VsCode 代码片段-提升研发效率