封装 Ajax

因为Ajax 使用起来比较麻烦,主要就是参数问题,比如到底使用GET 还是POST;到

底是使用同步还是异步等等,我们需要封装一个Ajax 函数,来方便我们调用。

   封装支持接收来自服务端的数据,不可以发送数据到服务端

/**

* 此封装只支持接收来自服务端的数据,不可以发送数据到服务端

 */

function ajax(obj) {

    var xhr = new XMLHttpRequest();

    obj.url = obj.url + '?rand=' + Math.random();

    xhr.open(obj.method, obj.url, obj.async);

    xhr.send(null);

    if (obj.async === false) {

        callback();

    }

    if (obj.async === true) {

        xhr.onreadystatechange = function () {

            if (xhr.readyState == 4) {

                callback();

            }

        };

    }

    function callback () {

        if (xhr.status == 200) {

            obj.success(xhr.responseText); //回调

        } else {

            alert('数据返回失败!状态代码:' + xhr.status + ',状态信息:' + xhr.statusText);

        }

    }

}

  

把上面的代码封装在ajax2.js中,在页面上引入该文件。

<!DOCTYPE html>

<html>

<head>

    <title>Ajax的封装</title>

    <meta charset="utf-8">

    <script src="ajax2.js"></script>

</head>

<body>

<button id="btn">调用Ajax</button>

<script>

    document.getElementById("btn").onclick=function(){

        ajax({

            method : 'get',

            url : 'http://localhost:3000/api/2',

            success : function (text) {

                alert(text);

            },

            async :false

        });

    };

</script>

</body>

</html>

7.2  封装支持接收来自服务端的数据,又可以发送数据到服务端

function ajax(obj) {

    var xhr = new XMLHttpRequest();

    obj.url = obj.url + '?rand=' + Math.random();

    obj.data = params(obj.data);

    if (obj.method === 'get') {

        obj.url = obj.url.indexOf('?') == -1 ? obj.url + '?' + obj.data : obj.url + '&' + obj.data;

    }

    if (obj.async === true) {

        xhr.onreadystatechange = function () {

            if (xhr.readyState == 4) {

                callback();

            }

        };

    }

    xhr.open(obj.method, obj.url, obj.async);

    if (obj.method === 'post') {

        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

        xhr.send(obj.data);

    } else {

        xhr.send(null);

    }

    if (obj.async === false) {

        callback();

    }

    function callback () {

        if (xhr.status == 200) {

            obj.success(xhr.responseText); //回调

        } else {

            alert('数据返回失败!状态代码:' + xhr.status + ',状态信息:' + xhr.statusText);

        }

    }

}

//名值对编码

function params(data) {

    var arr = [];

    for (var i in data) {

        arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));

    }

    return arr.join('&');

}

          希望能够帮到你!

Ajax的封装。的更多相关文章

  1. 原生态AJAX详解和jquery对AJAX的封装

    AJAX: A :Asynchronous [eI`sinkrenes] 异步 J :JavaScript    JavaScript脚本语言 A: And X :XML 可扩展标记语言 AJAX现在 ...

  2. 【前端学习笔记04】JavaScript数据通信Ajax方法封装

    //Ajax 方法封装 //设置数据格式 function setData(data){ if(!data){ return ''; } else{ var arr = []; for(k in da ...

  3. 原生ajax与封装的ajax使用方法

    当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...

  4. Ajax入门(二)Ajax函数封装

    如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...

  5. js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)

    js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...

  6. jQuery-实现简单的Ajax请求封装

    封装的意义在于复用,在于减少重复的代码. 我在项目中做了简单的Ajax请求封装,实现方式如下: //封装Ajax请求 $.extend({ ajaxDirect:function(url,type,d ...

  7. JQ中的Ajax的封装

    1.认识JQ中ajax的封装      jQ 对于ajax的封装有两层实现:$.ajax 为底层封装实现:基于 $.ajax ,分别实现了$.get 与$.post 的高层封装实现: 2.Ajax的底 ...

  8. Jquery Ajax简单封装(集中错误、请求loading处理)

    Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...

  9. Ajax的封装,以及利用jquery的ajax获取天气预报

    1.Ajax的封装 function ajax(type,url,param,sync,datetype,callback){//第一个参数是获取数据的类型,第二个参数是传入open的url,第三个是 ...

随机推荐

  1. 小白学Python——用 百度翻译API 实现 翻译功能

    本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...

  2. 一、JVM — Java内存区域

    Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚拟机栈 2.3 本地方法栈 2.4 堆 2.5 方法区 2. ...

  3. 小a的轰炸游戏(差分,前缀和)

    题目传送门 题意: 给出一个n*m的矩形,然后有两个操作. 1操作,对一个给出的菱形,对菱形范围内的东西进行+1. 2操作,对一个上半菱形的区域,进行+1操作. 最后求矩形内各个数的异或和. 思路: ...

  4. ISC2016训练赛 phrackCTF--Smali

    测试文件:https://static2.ichunqiu.com/icq/resources/fileupload/phrackCTF/REVERSE/Crackme.smali 参考资料:http ...

  5. Android数据库使用指南(下)

    前言 上面已经说了,对表进行修改,其实就是对数据库进行升级,删除表也算升级啊,反正就是发生变化,数据库就需要升级. 所以老实说其实有个地方决定了数据库的版本 public class DBHelper ...

  6. 基于tcp和udp协议的套接字

    socket:是在应用层和传输层之间的一个抽象层,它把TCP/IP层的复杂的操作封装抽象,并提供一些接口供应用层调用 套接字:被设计用于同一台主机上多个应用程序之间的通信,被称为进程之间通信或IPC ...

  7. Codeforces Round #427 (Div. 2) - A

    题目链接:http://codeforces.com/contest/835/problem/A 题意:两个人给网站发信息,现在给出信息的长度n,两个人的延迟和打字速度(一个字符),问网站先收到哪个人 ...

  8. rev 反向输出文件内容

    1.命令功能 rev 按行反向输出文件内容 2.语法格式 rev  file 3.使用范例 [root@localhost ~]# echo {a..k} >> test [root@lo ...

  9. 牛客练习赛49 B 筱玛爱阅读 (状压DP,子集生成)

    链接:https://ac.nowcoder.com/acm/contest/946/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262875K,其他语言5257 ...

  10. 前端错误监控上报公共方法,可在父页面及iframe子页面同时使用

    先创建公共文件error-reported.js 内容如下: /** * 获取前端错误信息进行上报 * @param iframe */ function catchError (iframe) { ...