AJAX---基本的封装

基本的封装

  • 函数就可以理解为一个想要做的事情,函数体中约定了这件事情做的过程,直到调用时才开始工作。
  • 将函数作为参数传递就像是将一个事情交给别人,这就是委托的概念

封装:

1. 写一个相对比较完善的用例

2. 写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体

3. 根据使用过程中的需求抽象参数

AJAX 请求封装

    /**
    * 发送一个 AJAX 请求
    * @param {String} method 请求方法
    * @param {String} url 请求地址
    * @param {Object} params 请求参数
    * @param {Function} done 请求完成过后需要做的事情(委托/回调)
    */
  <script>
    // 封装者=============================
    function ajax(method, url, params, done) {
      method = method.toUpperCase()
      var xhr = new XMLHttpRequest()
      if (typeof params === ‘object‘) {
        var tempArr = []
        for (var key in params) {
          var value = params[key]
          tempArr.push(key + ‘=‘ + value)
        }
        params = tempArr.join(‘&‘)
      }
      if (method === ‘GET‘) {
        url += ‘?‘ + params
      }
      xhr.open(method, url, false)
      var data = null
      if (method === ‘POST‘) {
        xhr.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘)
        data = params
      }
      xhr.onreadystatechange = function () {
        if (this.readyState !== 4) return
        // 不应该在封装的函数中主观的处理响应结果
        // console.log(this.responseText)
        // 你说我太主观,那么你告诉我应该做什么
        done(this.responseText)
      }
      xhr.send(data)
    }

    // 调用者============================

    var onDone = function (res) {
      console.log(‘hahahahaha‘)
      console.log(‘hohohohoho‘)
      console.log(res)
      console.log(‘做完了‘)
    }
    ajax(‘get‘, ‘time.php‘, {}, onDone)
  </script>
function ajax(method, url, params, done) {
      // 统一转换为大写便于后续判断
      method = method.toUpperCase()
      // 对象形式的参数转换为 urlencoded 格式
      var pairs = []
      for (var key in params) {
        pairs.push(key + ‘=‘ + params[key])
      }
      var querystring = pairs.join(‘&‘)
      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new
        ActiveXObject(‘Microsoft.XMLHTTP‘)
      xhr.addEventListener(‘readystatechange‘, function () {
        if (this.readyState !== 4) return
        // 尝试通过 JSON 格式解析响应体
        try {
          done(JSON.parse(this.responseText))
        } catch (e) {
          done(this.responseText)
        }
      })
      // 如果是 GET 请求就设置 URL 地址 问号参数
      if (method === ‘GET‘) {
        url += ‘?‘ + querystring
      }
      xhr.open(method, url)
      // 如果是 POST 请求就设置请求体
      var data = null
      if (method === ‘POST‘) {
        xhr.setRequestHeader(‘Content‐Type‘, ‘application/x‐www‐form‐urlencoded‘)
        data = querystring
      }
      xhr.send(data)
    }

原文地址:https://www.cnblogs.com/jane-panyiyun/p/12283461.html

时间: 2024-08-29 12:13:30

AJAX---基本的封装的相关文章

jQuery中对AJAX操作的封装函数

jQuery提供了6个简化AJAX操作的函数,每个都可以代替元素AJAX中的四步代码! (1)$('xxx').load()         jQuery对象函数 (2)$.get()                   jQuery全局函数 (3)$.post()                 jQuery全局函数 (4)$.getScript()          jQuery全局函数 (5)$.getJSON()           jQuery全局函数 (6)$.ajax()     

ajax的再次封装!(改进版) —— new与不 new 有啥区别?

生命不息重构不止! 上一篇写了一下我对ajax的再次封装的方法,收到了很多有价值的回复,比如有童鞋建议用$.extend,一开始还以为要做成插件呢,后来才知道,原来这个东东还可以实现合并.省着自己再去做判断了. 还有童鞋说“要不要多加点传入参数”,这一下提醒我了,ajax有很多参数呀,常用的我考虑进来了,但是还有很多不常用的呢,如果需要的话怎么办?在看看我调用原生ajax的方式,kao,完全不支持增加其他参数吗,这怎么行,改一定要改.于是就改成了这样. 1 //对ajax的封装 //最基础的一层

Jquery Ajax二次封装(部分转载)

/* ajax调用扩展 */ $.extend($,{ ajaxGetJson:function(url,data,callback) { $.ajax({ url:url, data:data, datatype:"json", method:"get", contentType: "application/json", beforeSend:function(){ //myLoad();//打开加载层 }, complete:function

javascript ajax 简易的封装

1 function ajax(obj){ 2 var xhr = (function (){//获取xhr对象,为了兼容ie6所以进行了重新封装 3 if(typeof XMLHttpRequest !='undefined') { 4 return new XMLHttpRequest(); 5 }else if(typeof ActiveXObject !='undefined') { 6 var version = [ 7 'MSXML2.XMLHttp6.0', 8 'MSXML2.X

jquery Ajax 全局调用封装

有一种情况:全站都要用异步方式来调用 数据,提交数据,那么你每次操作 都会要$.ajax({.....}) 写重复的方法 和代码,冗余太大, 也浪费时间,虽说你有代码自动提示补全,但真的不优雅,身为前端极客,是不能允许的! [嘿嘿!虽说我现在基本不用jquery了 ,不过异步概念 是永远要用的,就帮助下新人] jQuery Ajax通用js封装 第一步:引入jQuery库 <script type="text/javascript" src="/js/jquery.mi

ajax的再次封装!

js的动态加载.缓存.更新以及复用 系列有点卡文,放心会继续的.先来点更基础的,为js的加载做点铺垫. jQuery的ajax本来就很方便了,为啥还要在进一步的封装呢?这个首先要看项目的具体需求了,如果觉得不需要,那么完全可以直接用jQuery提供的各种ajax的方法.如果像我似地,感觉不太方便的话,那么完全可以按照自己的想法和需求来再次封装一下. 需求: 1.调用的时候更加的简单. 2.可以灵活的做各种设置和变化. 3.可以满足一些通用的需求.比如出错的时候给出提示. 项目现状: 做ajax请

javascript中Ajax请求的封装代码

/****************************ajax请求 start**************************************/ function ajaxClass(_url, _successCallback, _failureCallback, _urlParameters, _callbackParams, _async, _charset, _timeout, _frequency, _requestTimes, _frame) { /** * AJAX

对jquery中的$.ajax二次封装 从而多次调用 今天一整天都在想这个事情

当然了  我封装的是$.ajax  可以传参数  多次调用请求接口  为啥我们这地方不注重前端呢  我都不知道为啥去坚持 不说了  上代码 js文件 $ajax.js $(function(){ /** * ajax封装 * url 发送请求的地址 * data 发送到服务器的数据,数组存储,如:{"username": "张三", "password": 123456} * succCallback 成功回调函数 * errorCallback

原生js和jquery发送ajax请求及封装

原生js                                   // ajax get 五部曲function ajax_get(url,data){ // 异步对象 var ajax=new XMLHttpRequest(); // 设置url和请求方式 // url方法 如果有数据要把数据拼接到url中?name=jack&age=20 if(data){ url+=?; url+=data; }else{}; ajax.open('get',url); // 发送请求 aja

通用ajax请求方法封装,兼容主流浏览器

ajax简介 没有AJAX会怎么样?普通的ASP.Net每次执行服务端方法的时候都要刷新当前页面.如果没有AJAX,在youku看视频的过程中如果点击了"顶.踩".评论.评论翻页,页面就会刷新,视频就会被打断.开发一个看效果:用<video src="diaosi.mp4" autoplay controls></video>播放视频(只有支持html5的浏览器能播放),然后放一个"赞"按钮的功能(赞的数量存到数据库),看