使用原生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实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
Javascript UrlDecode函数代码
Jan 09 Javascript
Javascript保存网页为图片借助于html2canvas库实现
Sep 05 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
JS实现的tab切换选项卡效果示例
Feb 28 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 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
php include加载文件两种方式效率比较
2010/08/08 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
php常用hash加密函数
2014/11/22 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
python程序文件扩展名知识点详解
2020/02/27 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
环保志愿者活动方案
2014/08/14 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
宿舍管理制度范本
2015/08/07 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
python中tkinter复选框使用操作
2021/11/11 Python
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers