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实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
js展开闭合效果演示代码
Jul 24 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
Jul 09 Javascript
JavaScript DOM节点添加示例
Jul 16 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
JavaScript在控件上添加倒计时功能的实现代码
Jul 04 Javascript
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
vue+Element中table表格实现可编辑(select下拉框)
May 21 Javascript
详解JavaScript作用域、作用域链和闭包的用法
Sep 03 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+MySql编写聊天室
2006/10/09 PHP
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
php正则修正符用法实例详解
2016/12/29 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python随机生成彩票号码的方法
2015/03/05 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Django更新models数据库结构步骤
2020/04/01 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
通过自学python能找到工作吗
2020/06/21 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
销售员求职个人的自我评价
2014/02/19 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
投标承诺书怎么写
2014/05/24 职场文书
学生检讨书如何写
2014/10/30 职场文书
质量整改报告范文
2014/11/08 职场文书
python 模块重载的五种方法
2021/04/24 Python
关于golang高并发的实现与注意事项说明
2021/05/08 Golang