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 相关文章推荐
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
javascript学习笔记(四) Number 数字类型
Jun 19 Javascript
js数组操作常用方法
May 08 Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
js检测用户输入密码强度
Oct 22 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
webpack组织模块打包Library的原理及实现
Mar 10 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
Aug 27 Javascript
微信小程序登录session的使用
Mar 17 Javascript
JS实现横向轮播图(中级版)
Jan 18 Javascript
node+vue实现文件上传功能
May 28 Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 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文件的实现方法
2007/03/19 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
分享php分页的功能模块
2015/06/16 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP类型约束用法示例
2016/09/28 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
深入了解Python中pop和remove的使用方法
2018/01/09 Python
简单了解python的break、continue、pass
2019/07/08 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Django框架模板用法入门教程
2019/11/04 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
经典c++面试题六
2012/01/18 面试题
农村党支部先进事迹
2014/01/14 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
团队激励口号
2014/06/06 职场文书
基层党员对照检查材料
2014/09/24 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
MySQL的索引你了解吗
2022/03/13 MySQL