Ajax--jQuery--模仿jQuery封装ajax方法 !!!

模仿jQuery封装ajax方法

/**
 * 模拟实现 jQuery 中的 ajax方法
 * @param {object} obj 
 */
function ajax(obj) {
  // 默认参数
  var defaults = {
    type: 'get',
    data: {},
    url: '#',
    dataType: 'text',
    async: true,
    success: function (data) {
      console.log(data)
    }
  }
  // 处理形参,传递参数的时候就覆盖默认参数,不传递就使用默认参数
  for (var key in obj) {
    defaults[key] = obj[key];
  }
  // 1、创建XMLHttpRequest对象
  var xhr = null;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else {
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
  }
  // 把对象形式的参数转化为字符串形式的参数
  /*
  {username:'zhangsan','password':123}
  转换为
  username=zhangsan&password=123
  */
  var param = '';
  for (var attr in obj.data) {
    param += attr + '=' + obj.data[attr] + '&';
  }
  if (param) {
    param = param.substring(0, param.length - 1);
  }
  // 处理get请求参数并且处理中文乱码问题,在浏览器上面没有出现乱码
  if (defaults.type == 'get') {
    // defaults.url += '?' + encodeURI(param);
    defaults.url += '?' + param
  }
  // 2、准备发送(设置发送的参数)
  xhr.open(defaults.type, defaults.url, defaults.async);
  // 处理post请求参数并且设置请求头信息(必须设置)
  var data = null;
  if (defaults.type == 'post') {
    data = param;
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  }
  // 3、执行发送动作
  xhr.send(data);
  // 处理同步请求,不会调用回调函数
  if (!defaults.async) {
    if (defaults.dataType == 'json') {
      return JSON.parse(xhr.responseText);
    } else {
      return xhr.responseText;
    }
  }
  // 4、指定回调函数(处理服务器响应数据)
  xhr.onreadystatechange = function () {
    console.log(123)
    if (xhr.readyState == 4) {
      if (xhr.status == 200) {
        var data = xhr.responseText;
        if (defaults.dataType == 'json') {
          // data = eval("("+ data +")");
          data = JSON.parse(data);
        }
        defaults.success(data);
      }
    }
  }

}

测试

前端代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
    #container {
      width: 360px;
      min-height: 100px;
      background-color: lightgreen;
      position: absolute;
      left: 50%;
      top: 10px;
      margin-left: -180px;
    }
  </style>
  <script type="text/javascript" src="./jquery.js"></script>
  <script type="text/javascript" src="./ajax1.js"></script>
  <script type="text/javascript">
    /*
    jQuery-ajax相关API基本使用
    */
    $(function () {
      $("#btn").click(function () {
           var code = $("#code").val();
            ajax({
              type: 'get',
              url: './14.php',
              dataType: 'json',
              async: false,
              data: {
                username: '张三',
                password: '123'
              },
              success: function (data) {
                var html = '<div><span>用户名:' + data.username + '</span><span>密码:' + data.password +
                  '</span></div>'
                $("#info").html(html);
              }
            });
      });
    });
  </script>
</head>

<body>
  <div id="container">
    <div>
      图书编码:
      <input type="text" name="code" id="code">
      <input type="button" value="查询" id="btn">
    </div>
    <div id="info"></div>
  </div>
</body>

</html>

PHP代码:

<?php
$uname = $_GET['username'];
$pw = $_GET['password'];

// echo $uname.'-----'.$pw;
echo '{"username":"' . $uname . '","password":"' . $pw . '"}';

下面来测试一下 同步情况,看一下显示效果:

前端代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
    #container {
      width: 360px;
      min-height: 100px;
      background-color: lightgreen;
      position: absolute;
      left: 50%;
      top: 10px;
      margin-left: -180px;
    }
  </style>
  <script type="text/javascript" src="./jquery.js"></script>
  <script type="text/javascript" src="./ajax1.js"></script>
  <script type="text/javascript">
    /*
    jQuery-ajax相关API基本使用
    */
    $(function () {
      $("#btn").click(function () {
        //     var code = $("#code").val();
        //     ajax({
        //       type: 'get',
        //       url: './14.php',
        //       dataType: 'json',
        //       async: false,
        //       data: {
        //         username: '张三',
        //         password: '123'
        //       },
        //       success: function (data) {
        //         var html = '<div><span>用户名:' + data.username + '</span><span>密码:' + data.password +
        //           '</span></div>'
        //         $("#info").html(html);
        //       }
        //     });

        var data = ajax({
          type: 'post',
          url: './14.php',
          dataType: 'json',
          async: false,
          data: {
            username: '张三',
            password: '123'
          }
        });
        console.log(data);
        var html = '<div><span>用户名:' + data.username + '</span><span>密码:' + data.password + '</span></div>'
        $("#info").html(html);

      });
    });
  </script>
</head>

<body>
  <div id="container">
    <div>
      图书编码:
      <input type="text" name="code" id="code">
      <input type="button" value="查询" id="btn">
    </div>
    <div id="info"></div>
  </div>
</body>

</html>

PHP代码:

<?php
// $uname = $_GET['username'];
// $pw = $_GET['password'];

$uname = $_POST['username'];
$pw = $_POST['password'];

// echo $uname.'-----'.$pw;
echo '{"username":"' . $uname . '","password":"' . $pw . '"}';

测试结果如下所示:

测试结果
测试结果
如果这篇文章能够帮助到你,希望您不要吝惜点赞 ,您的支持是我继续努力的动力 !!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值