使用原生js写ajax实例(推荐)


Posted in Javascript onMay 31, 2017

实例如下:

// 使用原生js 封装ajax
// 兼容xhr对象
function createXHR(){
  if(typeof XMLHttpRequest != "undefined"){ // 非IE6浏览器
    return new XMLHttpRequest();
  }else if(typeof ActiveXObject != "undefined"){  // IE6浏览器
    var version = [
          "MSXML2.XMLHttp.6.0",
          "MSXML2.XMLHttp.3.0",
          "MSXML2.XMLHttp",
    ];
    for(var i = 0; i < version.length; i++){
      try{
        return new ActiveXObject(version[i]);
      }catch(e){
        //跳过
      }
    }
  }else{
    throw new Error("您的系统或浏览器不支持XHR对象!");
  }
}
// 转义字符
function params(data){
  var arr = [];
  for(var i in data){
    arr.push(encodeURIComponent(i) + "=" + encodeURIComponent(data[i]));
  }
  return arr.join("&");
}
// 封装ajax
function ga_ajax(obj){
  var xhr = createXHR();
  obj.url = obj.url + "?rand=" + Math.random(); // 清除缓存
  obj.data = params(obj.data);   // 转义字符串
  if(obj.method === "get"){   // 判断使用的是否是get方式发送
    obj.url += obj.url.indexOf("?") == "-1" ? "?" + obj.data : "&" + obj.data;
  }
  // 异步
  if(obj.async === true){
    // 异步的时候需要触发onreadystatechange事件
    xhr.onreadystatechange = function(){
      // 执行完成
      if(xhr.readyState == 4){
        callBack();
      }
    }
  }
  xhr.open(obj.method,obj.url,obj.async); // false是同步 true是异步 // "demo.php?rand="+Math.random()+"&name=ga&ga",
  if(obj.method === "post"){
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xhr.send(obj.data);
  }else{
    xhr.send(null);
  }
  // xhr.abort(); // 取消异步请求
  // 同步
  if(obj.async === false){
    callBack();
  }
  // 返回数据
  function callBack(){
    // 判断是否返回正确
    if(xhr.status == 200){
      obj.success(xhr.responseText);
    }else{
      obj.Error("获取数据失败,错误代号为:"+xhr.status+"错误信息为:"+xhr.statusText);
    }
  }
}

var html = document.getElementsByTagName("html")[0];
html.onclick = function(){
  ga_ajax({
    "method" : "post",
    "url" : "demo.php",
    "data" : {
      "name" : "gao",
      "age" : 100,
      "num" : "12346&598"
    },
    "success" : function(data){
      alert(data);
    },
    "Error" : function(text){
      alert(text);
    },
    "async" : false
  });
}

以上这篇使用原生js写ajax实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
Jan 29 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
jQuery ajax应用总结
Jun 02 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
纯JS打造网页中checkbox和radio的美化效果
Oct 13 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
jQuery实现拖动剪裁图片作为头像
Dec 28 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
在vue中实现简单页面逆传值的方法
Nov 27 Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 Javascript
Vue获取页面元素的相对位置的方法示例
Feb 05 Javascript
基于vue实现简易打地鼠游戏
Aug 21 Javascript
Javascript创建类和对象详解
May 31 #Javascript
Javascript继承机制详解
May 30 #Javascript
Vue2.x中的Render函数详解
May 30 #Javascript
jQuery实现动态删除LI的方法
May 30 #jQuery
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
May 30 #Javascript
JS给按钮添加跳转功能类似a标签
May 30 #Javascript
jQuery异步提交表单实例
May 30 #jQuery
You might like
php 文件上传系统手记
2009/10/26 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
子页向父页传值示例
2013/11/27 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
python之super的使用小结
2018/08/13 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
毕业生自荐书
2013/12/18 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
甘南现象心得体会
2014/09/11 职场文书
爱心募捐通知范文
2015/04/27 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
js之ajax文件上传
2021/05/13 Javascript
利用Python实现Picgo图床工具
2021/11/23 Python