使用原生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 相关文章推荐
学习YUI.Ext 第三天
Mar 10 Javascript
广告切换效果(缓动切换)
May 27 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
Jun 08 Javascript
document.getElementById获取控件对象为空的解决方法
Nov 20 Javascript
js实现文字闪烁特效的方法
Dec 17 Javascript
JS 拼凑字符串的简单实例
Sep 02 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
javascript 闭包详解及简单实例应用
Dec 31 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
Jan 17 Javascript
layDate插件设置开始和结束时间
Nov 15 Javascript
简谈创建React Component的几种方式
Jun 15 Javascript
解决layer 动态加载select 失效的问题
Sep 18 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的采集的图文教程
2007/03/11 PHP
php生成随机密码的几种方法
2011/01/17 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
犀利的js 函数集合
2009/06/11 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
python操作ie登陆土豆网的方法
2015/05/09 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python解析基于xml格式的日志文件
2017/02/25 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
什么是python类属性
2020/06/10 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
优秀党员先进材料
2014/12/18 职场文书
推荐信范文大全
2015/03/27 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
病假条格式范文
2015/08/17 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers