• 原生JS封装AJAX


    今天我们来说说利用原生JS封装AJAX.

    jquery框架的AJAX方法确实很好用,但有时候我们写的页面需要引入多个JS插件,不一定哪个插件就会和jquery发生冲突,导致jquery用不了了.或者页面比较简单,不需要加重浏览器的负担,这时我们自己封装一个AJAX就是一个很好的办法.

    //将数据转换成 a=1&b=2格式;
    function json2url(json){
       var arr = [];
       //加随机数防止缓存;
       json.t = Math.random();
       for(var name in json){
          arr.push(name+'='+json[name]);
       }
       return arr.join('&');
    }

    function ajax(json){
       //1.创建一个ajax对象;
       if(window.XMLHttpRequest){
          var oAjax = new XMLHttpRequest();
       }else{
          var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
       }

       //考虑默认值:
       if(!json.url){
          alert('请输入合理的请求地址!');
          return;
       }
       json.type = json.type || 'get';
       json.time = json.time || 5000;
       json.data = json.data || {};

       //判断用户传递的是get还是post请求:
       switch (json.type.toLowerCase()){
          case 'get':
             //2.打开请求;
             oAjax.open('get',json.url+'?'+json2url(json.data),true);
             //3.发送数据:
             oAjax.send();
             break;
          case 'post':
             //打开请求;
             oAjax.open('post',json.url,true);
             //设置请求头;
             oAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
             //发送数据;
             oAjax.send(json2url(json.data));
       }
       //4.获取响应数据
       oAjax.onreadystatechange = function() {
          if (oAjax.readyState == 4) {
             if (oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) {
                //如果外边传递了成功的回调函数,那么就执行,
                json.success && json.success(oAjax.responseText);
             } else {
                //如果外边传递了失败的回调函数,那么就执行,
                json.error && json.error(oAjax.status);
             }
             clearTimeout(timer);//规定时间内取到数据后清除定时器;
          }
       };
       var timer;
       timer = setTimeout(function(){//设置网络响应超时;
          alert('网络响应超时,请稍后再试');
          oAjax.onreadystatechange = null;//网络超时后清除事件;
       },json.time);
    };

    实际的运用:

     <script src="ajax3.js"></script>
        <script>
            window.onload = function(){
                var oBtn = document.getElementById('btn');

                oBtn.onclick = function(){
                    ajax({
                        url:'post.php',
                        data:{
                            a:1,
                            b:2
                        },
                        type:'post',
                        success:function(res){
                            alert(res);
                        },
                        error:function(s){
                            alert(s);
                        }
                    });
                }
            }
        </script>

    希望对你有帮助,我们明天见!

    坚持!坚持!坚持!坚持!坚持!坚持!

  • 相关阅读:
    阿里云物联网平台: 使用阿里云物联网平台提供的自定义Topic通信控制(Air202,TCP透传指令)
    ESA2GJK1DH1K基础篇: 源码使用注意事项和程序优化
    ESP8266 SDK开发: 常见问题及程序BUG修复
    ESP8266 SDK开发: 微信小程序篇-微信小程序通过UDP实现和ESP8266局域网通信控制
    ESP8266 SDK开发: 物联网篇-ESP8266连接阿里云物联网平台,使用阿里云提供的物模型Topic通信控制
    ESP8266 SDK开发: 物联网篇-ESP8266连接阿里云物联网平台,使用阿里云提供的自定义Topic通信控制
    ESA2GJK1DH1K基础篇: APP使用SmartConfig绑定Wi-Fi 设备并通过MQTT控制设备(V1.0)(AT+TCP非透传指令)
    【spring源码分析】@Value注解原理
    【vue】npm、node版本查看及npm常用命令
    【vue】常用操作
  • 原文地址:https://www.cnblogs.com/May-J-Wang/p/6986530.html
Copyright © 2020-2023  润新知