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,超强推荐base.js
Dec 23 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
Sep 17 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
有关json_decode乱码及NULL的问题
Oct 13 Javascript
属于你的jQuery提示框(Tip)插件
Jan 20 Javascript
js制作可以延时消失的菜单
Jan 13 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
Jul 05 Javascript
Openlayers实现点闪烁扩散效果
Sep 24 Javascript
JS前端使用canvas实现扩展物体类和事件派发
Aug 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网站基础优化方法小结
2008/09/29 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
vue自定义指令directive实例详解
2018/01/17 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
python ip正则式
2009/05/07 Python
Python入门篇之字典
2014/10/17 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
详解Python3的TFTP文件传输
2018/06/26 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
全国道德模范事迹
2014/02/01 职场文书
销售内勤岗位职责
2014/04/15 职场文书
中职生自荐信范文
2014/06/15 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
python脚本框架webpy模板控制结构
2021/11/20 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
python神经网络ResNet50模型
2022/05/06 Python