模拟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‘)
        })
时间: 2024-11-08 19:45:47

模拟image的ajaxPrefilter与ajaxTransport处理的相关文章

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *

[开源]jquery-ajax-cache:快速优化页面ajax请求,使用localStorage缓存请求

项目:jquery-ajax-cache 地址:https://github.com/WQTeam/jquery-ajax-cache     最近在项目中用到了本地缓存localStorage做数据的缓存. 1.简单说下localStorage localStorage和cookies相比,在浏览器中存储的容量更大.另外最大的特点是不会附带在http请求中传给后台,不会像cookies一样导致http头部变大影响传输性能.基于这个原因,localStorage适合缓存一些常用的数据,无需平凡的

jQuery 1.9 Ajax代码带注释

/* -----------ajax模块开始 -----------*/ var // Document location ajaxLocParts, ajaxLocation, ajax_nonce = jQuery.now(), ajax_rquery = /\?/, rhash = /#.*$/, rts = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r characte

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (

NYOJ 2356: 哈希计划【模拟】

题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

爬虫——网站模拟登录

使用Selenium与PhantomJS模拟登录豆瓣:https://www.douban.com/ #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 模拟登录豆瓣:https://www.douban.com/ """ from selenium import webdriver # 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

Android模拟位置信息

Android模拟位置程序,俗称GPS欺骗,只能修改采用GPS定位的软件. 手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位 常见的修改手法: 1. 抓包欺骗法,抓包改包欺骗服务器端, 但是得专门去针对某款app,而且现在很多app数据包都加密了 2. hook java层经纬度获取函数, 这个方法以前可以用,现在不行了 3. hook native层经纬度获取函数 4. 使用允许模拟地址位置信息(不是很通用有版本限制) 为了修改微信朋友圈地理位置信息,为了好玩 试过了上