使用原生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 Scoping and Hoisting 翻译
Jul 03 Javascript
js函数排序的实例代码
Jul 01 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
css如何让浮动元素水平居中
Aug 07 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
JavaScript实现开关等效果
Sep 08 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
详解Vue2.5+迁移至Typescript指南
Aug 01 Javascript
微信小程序wx.request的简单封装
Nov 13 Javascript
浅谈React中组件逻辑复用的那些事儿
May 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中常用数组处理方法实例分析
2008/08/30 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
php注册登录系统简化版
2020/12/28 PHP
php微信开发之上传临时素材
2016/06/24 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
python3.0 字典key排序
2008/12/24 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
学python需要去培训机构吗
2020/07/01 Python
Django 实现图片上传和下载功能
2020/12/31 Python
你懂得怎么写自荐信吗?
2013/12/27 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
会计自我鉴定
2014/02/04 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
护士毕业生自荐信
2014/02/07 职场文书
党员公开承诺书范文
2014/03/25 职场文书
课内比教学心得体会
2014/09/09 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
MySQL限制查询和数据排序介绍
2022/03/25 MySQL