使用原生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 &amp;&amp;和||运算法的另类使用技巧
Nov 28 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
Jan 27 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
js返回前一页刷新本页重载页面
Jul 29 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
原生javascript 学习之js变量全面了解
Jul 14 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
jquery 动态遍历select 赋值的实例
Sep 12 jQuery
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获取textarea的值并处理回车换行的方法
2014/10/20 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
js过滤数组重复元素的方法
2010/09/05 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
js动态引入的四种方法
2018/05/05 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
Python基础入门之seed()方法的使用
2015/05/15 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
python套接字流重定向实例汇总
2016/03/03 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
numpy 声明空数组详解
2019/12/05 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
css3选择器基本介绍
2014/12/15 HTML / CSS
东方通信股份有限公司VC面试题
2014/08/27 面试题
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
李白故里导游词
2015/02/12 职场文书
告知书格式
2015/07/01 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书