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 相关文章推荐
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
Mar 13 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
Mar 05 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
Oct 17 Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
Dec 18 Javascript
浅谈Webpack 是如何加载模块的
May 24 Javascript
JavaScript常见继承模式实例小结
Jan 11 Javascript
Node.js fs模块原理及常见用途
Oct 22 Javascript
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
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中try catch捕获异常实例详解
2014/11/21 PHP
PHP生成条形图的方法
2014/12/10 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
tween.js缓动补间动画算法示例
2018/02/13 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
vue实例的选项总结
2020/06/09 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
露营世界:Camping World
2017/02/02 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
财务负责人任命书
2014/06/06 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
旷课检讨书500字
2014/10/14 职场文书
围城读书笔记
2015/06/26 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
MYSQL常用函数介绍
2022/05/05 MySQL