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 设计模式之组合模式解析
Apr 09 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
CheckBoxList多选样式jquery、C#获取选择项
Sep 06 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
jQuery中:checked选择器用法实例
Jan 04 Javascript
js实现简单的选项卡效果
Feb 23 Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
OpenLayers3实现图层控件功能
Sep 25 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
咖啡的植物学知识
2021/03/03 咖啡文化
php抓即时股票信息
2006/10/09 PHP
劣质的PHP代码简化
2010/02/08 PHP
php修改时间格式的代码
2011/05/29 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
实例说明Python中比较运算符的使用
2015/05/13 Python
十个Python程序员易犯的错误
2015/12/15 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
python logging添加filter教程
2019/12/24 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
python程序输出无内容的解决方式
2020/04/09 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
刚毕业大学生自荐信范文
2014/02/20 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
业务内勤岗位职责
2014/04/30 职场文书
初二数学教学反思
2016/02/17 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书