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

发布时间 - 2026-01-11 01:32:14    点击率:

实例如下:

// 使用原生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写ajax  # 原生js实现ajax方法(超简单)  # 原生JS简单实现ajax的方法示例  # 给大家  # 您的  # 希望能  # 不支持  # 这篇  # 错误信息  # 小编  # 跳过  # 大家多多  # 判断是否  # XMLHttp  # throw  # lt  # length  # catch  # join  # encodeURIComponent  # amp  # obj  # ga_ajax 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 深圳防火门网站制作公司,深圳中天明防火门怎么编码?  进行网站优化必须要坚持的四大原则  Laravel如何配置和使用缓存?(Redis代码示例)  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何构建满足综合性能需求的优质建站方案?  Laravel如何实现多对多模型关联?(Eloquent教程)  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel如何使用模型观察者?(Observer代码示例)  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何快速搭建安全的FTP站点?  iOS发送验证码倒计时应用  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel如何配置Horizon来管理队列?(安装和使用)  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何使用Eloquent进行子查询  如何用狗爹虚拟主机快速搭建网站?  如何用景安虚拟主机手机版绑定域名建站?  如何用y主机助手快速搭建网站?  实例解析angularjs的filter过滤器  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  详解vue.js组件化开发实践  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Python文件操作最佳实践_稳定性说明【指导】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何在IIS中新建站点并配置端口与IP地址?  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  敲碗10年!Mac系列传将迎来「触控与联网」双革新  如何彻底删除建站之星生成的Banner?  如何在阿里云完成域名注册与建站?  如何在自有机房高效搭建专业网站?  中山网站制作网页,中山新生登记系统登记流程?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何用西部建站助手快速创建专业网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  Android GridView 滑动条设置一直显示状态(推荐)  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何快速上传建站程序避免常见错误?  如何在云主机快速搭建网站站点?  Laravel distinct去重查询_Laravel Eloquent去重方法  JS经典正则表达式笔试题汇总  如何在建站之星网店版论坛获取技术支持?  Android中AutoCompleteTextView自动提示  Swift开发中switch语句值绑定模式