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 相关文章推荐
学习面向对象之面向对象的术语
Nov 30 Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
Jan 13 Javascript
jQuery实现简单的文件上传进度条效果
Mar 26 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 Javascript
Vue组件中prop属性使用说明实例代码详解
May 31 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 Javascript
JS中的变量作用域(console版)
Jul 18 Javascript
element多个表单校验的实现
May 27 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python k-近邻算法实例分享
2014/06/11 Python
window下eclipse安装python插件教程
2017/04/24 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
2014高中生入党思想汇报范文
2014/09/13 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python