AJAX的js原生封装

AJAX的js原生封装

把get同步请求、get异步请求、post同步请求、post异步请求进行封装到一个函数进行调用

  • ajax.js

/**
 * 请求的方式: get/post
 * 请求的URL
 * 查询字段: key=value&key=value&k=v
 * 请求成功之后的回调函数
 * 
 * 请求失败之后的回调函数
 * 是否异步
 */
function selfAJAX(type, URL, searchStr, successFun, failFun, isAsync) {
  // 1, 创建网络请求对象
  var xhr;
  if (XMLHttpRequest) {
    // IE 7+ 和主流浏览器
    xhr = new XMLHttpRequest();
  } else {
    // IE 5, 6
    xhr = new ActiveXObject("Microsoft.XMLHttp");
  }
  // 2, 监听网络请求状态
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
        // 请求成功
        successFun(xhr.responseXML || xhr.responseText);
      } else {
        // 请求失败
        failFun('请求失败');
      }
    }
  }
  // 3, 配置请求
  var url;
  url = type.toLowerCase() == 'get' ? URL + '?' + searchStr : URL;
  // if (!(isAsync == false || isAsync == true)) {
  //   isAsync = true;
  // }
  if (typeof(isAsync) == 'undefined') {
    isAsync = true;
  }
  xhr.open(type, url, isAsync);
  // 4, 发送请求
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.send(type.toLowerCase() == 'get' ? null : searchStr);
}



  • ajax.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>02验证自己封装的ajax</title>
</head>
<body>
  <button id="getSync">GET 同步请求</button>
  <button id="getAsync">GET 异步请求</button>
  <button id="postSync">POST 同步请求</button>
  <button id="postAsync">POST 异步请求</button>
</body>
<!-- 引入自己封装的 ajax -->
<script src="./js/ajax.js"></script>
<script>
/**
 * AJAX: 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
 * 
 */
var getSync = document.getElementById('getSync');
var getAsync = document.getElementById('getAsync');
var postSync = document.getElementById('postSync');
var postAsync = document.getElementById('postAsync');

// get 同步请求
getSync.onclick = function() {
  selfAJAX('get', 'http://api.tianapi.com/txapi/worldtime/index', 'key=b3611e69be17f1fb021d4a30d80addc5&city=上海', function(rel) {
    console.log(rel);
  }, function(err) {
    console.log(err);
  }, false);
}
// get 异步请求
getAsync.onclick = function() {
  selfAJAX('get', 'http://api.tianapi.com/txapi/worldtime/index', 'key=b3611e69be17f1fb021d4a30d80addc5&city=上海', function(rel) {
    console.log(rel);
  }, function(err) {
    console.log(err);
  });
}


// post 同步请求
postSync.onclick = function() {
  selfAJAX('post', 'http://api.tianapi.com/txapi/worldtime/index', 'key=b3611e69be17f1fb021d4a30d80addc5&city=上海', function(rel) {
    console.log(rel);
  }, function(err) {
    console.log(err);
  }, false);
}

// post 异步请求
postAsync.onclick = function() {
  selfAJAX('post', 'http://api.tianapi.com/txapi/worldtime/index', 'key=b3611e69be17f1fb021d4a30d80addc5&city=上海', function(rel) {
    console.log(rel);
  }, function(err) {
    console.log(err);
  });
}

</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangmiao1130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值