使用原生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当中的代码嗅探扩展原生对象和原型(prototype)
Jan 11 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
Jan 24 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
详解JavaScript中的异常处理方法
Jun 16 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
超详细的JS弹出窗口代码大全
Apr 18 Javascript
Js自定义多选框效果的实例代码
Jul 05 Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 jQuery
怎样使你的 JavaScript 代码简单易读(推荐)
Apr 16 Javascript
js实现html滑动图片拼图验证
Jun 24 Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 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
动易数据转成dedecms的php程序
2007/04/07 PHP
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
学习jquery之一
2007/04/27 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python计算一个文件里字数的方法
2015/06/15 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
教师师德承诺书
2014/03/26 职场文书
教师党员一句话承诺
2014/03/28 职场文书
体操比赛口号
2014/06/10 职场文书
刘公岛导游词
2015/02/05 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
python - asyncio异步编程
2021/04/06 Python