使用原生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 相关文章推荐
用js实现下载远程文件并保存在本地的脚本
May 06 Javascript
Jquery遍历节点的方法小集
Jan 22 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
js检测用户输入密码强度
Oct 22 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
Oct 15 Javascript
微信小程序 购物车简单实例
Oct 24 Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 Javascript
原JS实现banner图的常用功能
Jun 12 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
Oct 23 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
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python链接Oracle数据库的方法
2015/06/28 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
解决python 文本过滤和清理问题
2019/08/28 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
物业招聘计划书
2014/01/10 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
2014年小学语文工作总结
2014/12/20 职场文书