使用原生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事件 delegate()使用方法介绍
Oct 30 Javascript
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
jQuery检测输入的字符串包含的中英文的数量
Apr 17 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
Sep 10 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
Nov 07 Javascript
Ionic3 UI组件之autocomplete详解
Jun 08 Javascript
vue.js简单配置axios的方法详解
Dec 13 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
Javascript实现简易天数计算器
May 18 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
Jul 27 Javascript
vue使用exif获取图片经纬度的示例代码
Dec 11 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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
php命名空间学习详解
2014/02/27 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
JavaScript的一些小技巧分享
2021/01/06 Javascript
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python中super的用法实例
2015/05/28 Python
python发送HTTP请求的方法小结
2015/07/08 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
巴西购物网站:Onofre Agora
2020/06/08 全球购物
慈善晚会策划方案
2014/05/14 职场文书
党员群众路线承诺书
2014/05/20 职场文书
社区维稳工作方案
2014/06/06 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
财务部会计岗位职责
2015/02/03 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
python实现过滤敏感词
2021/05/08 Python
Python打包为exe详细教程
2021/05/18 Python
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技