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插件源码
Jun 24 Javascript
javascript实现的简单计时器
Jul 19 Javascript
实例代码讲解jquery easyui动态tab页
Nov 17 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 Javascript
tangram.js库实现js类的方式实例分析
Jan 06 Javascript
node中间层实现文件上传功能
Jun 11 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
vue组件之间数据传递的方法实例分析
Feb 12 Javascript
深入浅析vue-cli@3.0 使用及配置说明
May 08 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
js中复选框的取值及赋值示例详解
Oct 18 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
实用函数4
2007/11/08 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php开启openssl的方法
2014/05/15 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP7内核之Reference详解
2019/03/14 PHP
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
通过js实现压缩图片上传功能
2020/02/25 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
详解Python核心对象类型字符串
2018/02/11 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
Python 存取npy格式数据实例
2020/07/01 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
聊城大学毕业生自荐书
2014/02/01 职场文书
合伙协议书
2014/04/23 职场文书
鲁迅故里导游词
2015/02/05 职场文书
高三语文教学反思
2016/02/16 职场文书