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 相关文章推荐
用JQuery模仿淘宝的图片放大镜显示效果
Sep 15 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
Oct 17 Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
javascript 终止函数执行操作
Feb 14 Javascript
webpack+vue.js快速入门教程
Oct 12 Javascript
原生js实现返回顶部缓冲效果
Jan 18 Javascript
详解node.js平台下Express的session与cookie模块包的配置
Apr 26 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
小程序获取周围IBeacon设备的方法
Oct 31 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
5种 JavaScript 方式实现数组扁平化
Oct 05 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中动态HTML的输出技术
2006/10/09 PHP
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
vue实现购物车案例
2020/05/30 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
python处理cookie详解
2014/02/07 Python
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
Python实现多线程抓取妹子图
2015/08/08 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Python魔术方法专题
2020/06/19 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
化工工艺专业求职信
2013/09/22 职场文书
公司踏青活动方案
2014/08/16 职场文书
房租涨价通知
2015/04/23 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python