JQuery中模拟image的ajaxPrefilter与ajaxTransport处理


Posted in Javascript onJune 19, 2015

//////////////////////////////////////////////////////////////////
  // options 是请求的选项                        //
  // originalOptions 值作为提供给Ajax方法未经修改的选项,因此,没有ajaxSettings设置中的默认值 //
  // jqXHR 是请求的jqXHR对象                      //
  //////////////////////////////////////////////////////////////////
  $.ajaxPrefilter("image", function(options, originalOptions, jqXHR) {
    //通过预处理器转化类型
    if (options.test) {
      options.type = 'GET'
    }
    //增加前缀
    options.url = "http://img.mukewang.com/" + options.url
  });


  ///////////////////////
  // 请求分发器 transports //
  ///////////////////////
  $.ajaxTransport("image", function(s) {
    if (s.type === "GET" && s.async) {
      var image;
      return {
        send: function(_, callback) {
          image = new Image();
          function done(status) {
            if (image) {
              var statusText = (status == 200) ? "success" : "error",
                tmp = image;
              image = image.onreadystatechange = image.onerror = image.onload = null;
              callback(status, statusText, {
                image: tmp
              });
            }
          }
          image.onreadystatechange = image.onload = function() {
            done(200);
          };
          image.onerror = function() {
            done(404);
          };
          show(s.url)
          image.src = s.url;
        },
        abort: function() {
          if (image) {
            image = image.onreadystatechange = image.onerror = image.onload = null;
          }
        }
      };
    }
  });


  $("#test").click(function(){

     //执行一个异步的HTTP(Ajax)的请求。
    var ajax = $.ajax({
      test   : true, //测试
      url   : '547d5a45000156f406000338-590-330.jpg',
      dataType : 'image',
      type   : 'POST',
      data: {
        foo: ["bar1", "bar2"]
      },
      //这个对象用于设置Ajax相关回调函数的上下文
      context: document.body,
      //请求发送前的回调函数,用来修改请求发送前jqXHR
      beforeSend: function(xhr) {
        xhr.overrideMimeType("text/plain; charset=x-user-defined");
        show('局部事件beforeSend')
      },
      //请求完成后回调函数 (请求success 和 error之后均调用)
      complete: function() {
        show('局部事件complete')
      },
      error: function() {
        show('局部事件error请求失败时调用此函数')
      },
      success: function() {
        show('局部事件success')
      }
    })

    ajax.done(function() {
      show('done')
    }).fail(function() {
      show('fail')
    }).always(function() {
      show('always')
    })
Javascript 相关文章推荐
33种Javascript 表格排序控件收集
Dec 03 Javascript
js里怎么取select标签里的值并修改
Dec 10 Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
Javascript中call与apply的学习笔记
Sep 22 Javascript
javascript实现的图片预览功能
Mar 25 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
node-sass安装失败的原因与解决方法
Sep 04 Javascript
Node.js爬取豆瓣数据实例分析
Mar 05 Javascript
vue+axios+mock.js环境搭建的方法步骤
Aug 28 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
c#程序员对TypeScript的认识过程
Jun 19 #Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 #Javascript
TypeScript 中接口详解
Jun 19 #Javascript
TypeScript 学习笔记之基本类型
Jun 19 #Javascript
使用Chrome浏览器调试AngularJS应用的方法
Jun 18 #Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 #Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 #Javascript
You might like
php 结果集的分页实现代码
2009/03/10 PHP
如何使用php实现评委评分器
2015/07/31 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
10个示例带你掌握python中的元组
2020/11/23 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
500字小学生检讨书
2015/02/19 职场文书