使用原生js写ajax实例(推荐)

 更新时间:2017年05月31日 07:46:50   投稿:jingxian  
下面小编就为大家带来一篇使用原生js写ajax实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

实例如下:

// 使用原生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实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • js下拉框二级关联菜单效果代码具体实现

    js下拉框二级关联菜单效果代码具体实现

    这篇文章介绍了js下拉框二级关联菜单效果代码具体实现,有需要的朋友可以参考一下
    2013-08-08
  • js中合并对象的几种实现方法

    js中合并对象的几种实现方法

    "js 合并对象"是一种在JavaScript编程中常见的操作,用于将多个对象的属性合并到一起,通常,我们会使用ES6的扩展运算符或者Object.assign()函数来实现这个功能,感兴趣的可以了解一下
    2023-08-08
  • 1分钟快速了解js实现下载文件功能的4种方式

    1分钟快速了解js实现下载文件功能的4种方式

    在前端开发中,我们经常需要实现文件下载功能,例如下载用户上传的图片、用户生成的文件等,这篇文章主要给大家介绍了关于如何通过1分钟快速了解js实现下载文件功能的4种方式,需要的朋友可以参考下
    2024-03-03
  • Bootstrap模态对话框中显示动态内容的方法

    Bootstrap模态对话框中显示动态内容的方法

    今天小编就为大家分享一篇Bootstrap模态对话框中显示动态内容的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • js前端页面用插件docx-preview展示docx文件

    js前端页面用插件docx-preview展示docx文件

    这篇文章主要给大家介绍了如何使用docx-preview.min.js插件在页面上展示.docx文件,并说明了该插件依赖于jszip.min.js插件,通过实例展示了如何实现这一功能,需要的朋友可以参考下
    2024-11-11
  • js超时调用setTimeout和间歇调用setInterval实例分析

    js超时调用setTimeout和间歇调用setInterval实例分析

    这篇文章主要介绍了js超时调用setTimeout和间歇调用setInterval,以实例形式对比分析了setTimeout与setInterval的具体使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • 微信小程序自定义底部弹出框

    微信小程序自定义底部弹出框

    这篇文章主要为大家详细介绍了微信小程序自定义底部弹出框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • E3 tree 1.6在Firefox下显示问题的修复方法

    E3 tree 1.6在Firefox下显示问题的修复方法

    tree 在Firefox下只显示一句话,用firebug查看页面元素观察发现,两个script导入被一个<script>分隔开了,显然是document.write的问题.由于Firefox对js规范的检查比较严格,肯定一些字符输出的的时候没有转义
    2013-01-01
  • EasyUI弹出框行编辑如何通过下拉框实现内容联动

    EasyUI弹出框行编辑如何通过下拉框实现内容联动

    本文介绍了如何使用EasyUI弹出框和下拉框实现内容联动,并详细描述了当用户选择下拉框时如何更新当前行数据,通过解决datagrid的onClickRow和onClickCell事件不触发的问题,实现了下拉框选择后数据的自动填充
    2024-11-11
  • await Streaking解决原理示例详解

    await Streaking解决原理示例详解

    这篇文章主要为大家介绍了await Streaking解决原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论