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 相关文章推荐
更正确的asp冒泡排序
May 24 Javascript
修改jQuery Validation里默认的验证方法
Feb 14 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
jQuery浏览器CSS3特写兼容实例
Jan 19 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 Javascript
js实现搜索框关键字智能匹配代码
Mar 26 Javascript
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
Angular 5.0 来了! 有这些大变化
Nov 15 Javascript
Angular5中调用第三方js插件的方法
Feb 26 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
Oct 12 Javascript
使用webpack搭建pixi.js开发环境
Feb 12 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通用分页类page.php[仿google分页]
2008/08/31 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
node实现登录图片验证码的示例代码
2018/04/20 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
python实现linux下抓包并存库功能
2018/07/18 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
医学检验专业个人求职信范文
2013/12/04 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
党校学习心得体会范文
2014/09/09 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
文明单位创建材料
2014/12/24 职场文书
学籍证明模板
2015/06/18 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书