使用原生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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
JQuery this 和 $(this) 的区别
Aug 23 Javascript
Javascript 面向对象(三)接口代码
May 23 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
微信小程序与后台PHP交互的方法实例分析
Dec 10 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 Javascript
JavaScript find()方法及返回数据实例
Apr 30 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
PHP4中实现动态代理
2006/10/09 PHP
php&amp;java(一)
2006/10/09 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
Python中几个比较常见的名词解释
2015/07/04 Python
简单讲解Python中的闭包
2015/08/11 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python查看微信撤回消息代码
2018/06/07 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Python如何访问字符串中的值
2020/02/09 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
小学庆六一活动方案
2014/02/28 职场文书
保密承诺书
2014/03/27 职场文书
寒假家长评语大全
2014/04/16 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
详解MySQL的半同步
2021/04/22 MySQL
MySQL创建表操作命令分享
2022/03/25 MySQL