JQuery中模拟image的ajaxPrefilter与ajaxTransport处理

 更新时间:2015年06月19日 09:15:34   投稿:junjie  
这篇文章主要介绍了JQuery中模拟image的ajaxPrefilter与ajaxTransport处理,本文直接给出模拟实现代码,代码中包含详细注释,需要的朋友可以参考下

//////////////////////////////////////////////////////////////////
  // 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')
    })

您可能感兴趣的文章:

相关文章

  • jQuery插件的写法分享

    jQuery插件的写法分享

    这几天在学习jQuery插件的写法,搜索了一些资料,包括jQuery官方的示例,但发现描述的并不是很清晰。最后,终于搜索到一篇讲解比较清晰的文章,这里自己总结了一下,并以一个具体的示例来说明jQuery插件的写法
    2013-06-06
  • jQuery操作选中select下拉框的值代码实例

    jQuery操作选中select下拉框的值代码实例

    这篇文章主要介绍了jQuery操作选中select下拉框的值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 自写的一个jQuery圆角插件

    自写的一个jQuery圆角插件

    下面介绍自己写的一个jQuery圆角的插件,功能非常简单。目前只能实现1px的固定弧度的圆角矩形边框。
    2010-10-10
  • jQuery使用经验小技巧(推荐)

    jQuery使用经验小技巧(推荐)

    下面小编就为大家带来一篇jQuery使用经验小技巧(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 15个jquery常用方法、小技巧分享

    15个jquery常用方法、小技巧分享

    这篇文章主要介绍了15个jquery常用方法、小技巧分享,本文总结了一些开发中常用的方法,例如获取td的行标和列标、判断是否是回车按下、全选和反选等,需要的朋友可以参考下
    2015-01-01
  • qTip 基于JQuery的Tooltip插件[兼容性好]

    qTip 基于JQuery的Tooltip插件[兼容性好]

    qTip是一个实现圆角对话气泡框样式的Tooltip jQuery插件。支持多种浏览器,可定制,功能强大。
    2010-09-09
  • jquery解决图片路径不存在执行替换路径

    jquery解决图片路径不存在执行替换路径

    在一些图片比较多的网站上会出现访问时图片不存在的情况:默认显示出来的样子很不雅观,可以解决图片不存在时,使用其他的图片替换吗,答案是可以的;感兴趣的朋友可以了解下,或许本文可以帮助到你
    2013-02-02
  • jquery实现鼠标悬浮停止轮播特效

    jquery实现鼠标悬浮停止轮播特效

    这篇文章主要介绍了jquery实现鼠标悬浮停止轮播特效,鼠标悬停在图片上则停止轮播,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • JQuery与JS里submit()的区别示例介绍

    JQuery与JS里submit()的区别示例介绍

    这篇文章主要介绍了JQuery与JS里submit()的区别,需要的朋友可以参考下
    2014-02-02
  • 用jquery统计子菜单的条数示例代码

    用jquery统计子菜单的条数示例代码

    统计子菜单条数的方法有很多,在本文为大家详细介绍下使用jquery是如何实现的,感兴趣的朋友不要错过
    2013-10-10

最新评论