使用原生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 相关文章推荐
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
input:checkbox多选框实现单选效果跟radio一样
Jun 16 Javascript
jquery中push()的用法(数组添加元素)
Nov 25 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
Oct 19 Javascript
js的三种继承方式详解
Jan 21 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
基于Vue+element-ui 的Table二次封装的实现
Jul 20 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
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
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Python 自由定制表格的实现示例
2020/03/20 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
UML设计模式笔试题
2014/06/07 面试题
小车司机岗位职责
2013/11/25 职场文书
军训心得体会
2013/12/31 职场文书
市场部管理制度
2014/02/02 职场文书
征婚广告词
2014/03/17 职场文书
会计学毕业生求职信
2014/06/25 职场文书
七一讲话心得体会
2014/09/05 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
护士年终个人总结
2015/02/13 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
浅谈JS的二进制家族
2021/05/09 Javascript
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS