使用原生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中定义私有方法说明(private method)
Jan 27 Javascript
node.js WEB开发中图片验证码的实现方法
Jun 03 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
Angular2实现自定义双向绑定属性
Mar 22 Javascript
浅析Javascript中双等号(==)隐性转换机制
Oct 27 Javascript
JS运动特效之完美运动框架实例分析
Jan 24 Javascript
使用webpack构建应用的方法步骤
Mar 04 Javascript
Vue实现日历小插件
Jun 26 Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 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
WordPress中is_singular()函数简介
2015/02/05 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
javascript实现画板功能
2020/04/12 Javascript
js实现列表按字母排序
2020/08/11 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
django框架auth模块用法实例详解
2019/12/10 Python
如何使用python传入不确定个数参数
2020/02/18 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
Python偏函数实现原理及应用
2020/11/20 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
2016年寒假见闻
2015/10/10 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript