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 onkeydown,onkeyup,onkeypress,onclick,ondblclick
Feb 04 Javascript
在模板页面的js使用办法
Apr 01 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
javascript中的self和this用法小结
Feb 08 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
微信浏览器禁止页面下拉查看网址实例详解
Jun 28 Javascript
微信小程序之蓝牙的链接
Sep 26 Javascript
微信小程序实现城市列表选择
Jun 05 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
Jul 27 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 Javascript
基于js实现数组相邻元素上移下移
May 19 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者的疑难问答(2)
2006/10/09 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
JavaScript中的排序算法代码
2011/02/22 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
python学生信息管理系统
2018/03/13 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
基于python实现百度翻译功能
2019/05/09 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
Python二元赋值实用技巧解析
2019/10/25 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
Python中and和or如何使用
2020/05/28 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
餐厅考勤管理制度
2014/01/28 职场文书
社区班子对照检查材料
2014/08/27 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
2015年暑期见闻
2015/07/14 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技