• 重庆建川博物馆正式开馆 唐良智调研部分场馆 2019-10-07
  • 斯柯达Kodiaq RS谍照 10月巴黎车展亮相 2019-10-05
  • 鄠邑区主城区因降雨集中积水严重 部分路段临时交通管制 2019-09-29
  • 多证合一 全国核发新版营业执照900余万张 2019-09-29
  • 粽情粽意 传承文明———我们的节日2018端午节 2019-09-28
  • 特朗普威胁中国,如果中国报复性征收美国高关税,美国将征收中国额外关税,特朗普真流氓。难道中国是吓大的? 2019-09-28
  • 父债子偿家不和 法官亲情促调解 2019-09-28
  • 小偷入室盗窃被抓后反教训失主晚上别开着门睡觉 2019-09-24
  • 世界各国因为势不如人,所以才会对美国的进逼忍气吞声。美国现在说话意味已不在有什么掩盖,明显的霸权主义威胁意味甚浓!特朗普的冒险性格,让世界处于危险之中!... 2019-09-09
  • 全国百家网络媒体全媒体记者彭水采风活动 2019-09-09
  • 用个例来抹黑个国家,有你这么无耻的吗?西方银行倒闭案少了吗? 2019-09-06
  • 中美智库联合报告:停止贸易战符合中美双方利益 2019-09-06
  • “拖稿”也自信 美女作家落落来渝聊新书 2019-09-03
  • 中央网信办负责人进网站宣讲党的十九大精神 2019-09-03
  • 农民回答风水神,“勤劳的农民玩什么没有富起来”。(原创首发) 2019-09-02
  • Jquery中文网 南粤风采36选7开奖公告 www.77402m.com
    Jquery中文网 >  jQuery  >  jquery 教程  >  正文 jQuery+FormData+文件上传+上传进度

    南粤风彩36选7开奖结果:jQuery+FormData+文件上传+上传进度

    发布时间:2016-09-18   编辑:南粤风采36选7开奖公告 www.77402m.com
    jquery中文网为您提供jQuery+FormData+文件上传+上传进度等资源,欢迎您收藏本站,我们将为您提供最新的jQuery+FormData+文件上传+上传进度资源

    南粤风采36选7开奖公告 www.77402m.com 总结我做HTML5文件上传插件遇到的技术问题

    先贴上源码:fileupload-html5.js(PS:公司使用seajs框架)


    问题列表

    1. jquery.ajax没有监听上传进度的onprogress事件。

    2. XMLHttpRequest(XHR)跨域


    问题解答

    1. jQuery没有给出onprogress事件的接口,必须从其他接口中找到原生XHR对象。

    jQuery.ajax()返回的是jqXHR对象。jqXHR模仿XHR(原生),但没有模仿实现XHR的所有方法和属性(如:.upload),即使jqXHR增加了一个特有方法(如:.promise())。所以jqXHR并不是XHR的超集。

    //下面是截取jQ内部的源码,$.ajax();返回的就是这个jqXHR(伪造XMLHttpRequest)
    // Fake xhr
        jqXHR = {
    
            readyState: 0,
    

    XHRupload属性指向XMLHttpRequestUpload(IE10是XMLHttpRequestEventTarget),该对象的onprogress事件可以监听上传进度。既然jQ没有给出这个功能的api,但jQ某些数据上传方式是使用XHR的,所以我们可以从其它api中找到XHR。在XHR发送数据之前绑定onprogress事件可以实现上传进度功能。

    我从options参数配置中找到两个与XHR有关的属性:

    - xhr:回调创建XMLHttpRequest对象。

    xhr()返回值是XHR,提供给jQ使用,即发送数据就是用这个XHR。我们可以通过xhr创建一个回调函数覆盖它,同样返回XHR,但在此绑定onprogress事件。

    //jQ源码
    // Get a new xhr
    var handle, i,
        xhr = s.xhr();//[回调]在这里,下面是open方法
    
    // Open the socket
    // Passing null username, generates a login popup on Opera (#2865)
    if ( s.username ) {
        xhr.open( s.type, s.url, s.async, s.username, s.password );
    } else {
        xhr.open( s.type, s.url, s.async );
    }
    

    所以我们应该这样做:

    $.ajax({
        //.....
        xhr: function() {
            var xhr = $.ajaxSettings.xhr();
            //绑定上传进度的回调函数
            xhr.upload.addEventListener('progress', progress, false);
            return xhr;//一定要返回,不然jQ没有XHR对象用了
        }
    });
    
    - xhrFields:一对“文件名-文件值”组成的映射,用于设定原生的 XHR对象。

    xhrFields属性指向jQ内部创建的XHR,我们可以根据xhrFields获得XMLHttpRequest。由于xhrFields的值只能是json对象,所以不能以下面方式获取。

    //错误例子
    $.ajax({
        //......
        xhrFields: {
            upload.onprogress: function() {
                //语法错误
            }
        }
    });
    

    我们可以借助XHRonsendstart事件,如下:

    $.ajax({
        //......
        xhrFields: {
            onsendstart: function() {
                //this是指向XHR
                this.upload.addEventListener('progress', progress, false);
            }
        }
    });
    

    2. XMLHttpRequestⅡ(XHR)支持跨域,但需要后台允许。

    //后台需发送头部验证
    if($_REQUEST['cros']) {
        header("Access-Control-Allow-Origin:请求的域名");
    }
    

    根据后台给的接口,我需要增加一个参数cros。但我将这个参数与文件同事提交,却提示跨域限制。最后将这个参数放在url才行。
    原来XHR跨域是有两次请求的,第一次是验证请求,浏览器根据请求目的地址自动发出options请求。若通过,才能发出自定义的post请求。所以将参数放在post请求里,第一次请求没有cros参数,即不能通过。

    您可能感兴趣的文章:
    文件上传插件 jQuery File Upload
    Web文件上传???Plupload
    Web文件上传???Plupload
    jQuery File Upload
    jQuery File Upload
    jQuery文件上传插件 jcUpload
    jQuery异步上传插件
    Jquery上传插件 uploadify v3.1使用说明
    jQuery异步上传插件
    jquery ajax提交整个表单元素的快捷办法

    [关闭]
  • 重庆建川博物馆正式开馆 唐良智调研部分场馆 2019-10-07
  • 斯柯达Kodiaq RS谍照 10月巴黎车展亮相 2019-10-05
  • 鄠邑区主城区因降雨集中积水严重 部分路段临时交通管制 2019-09-29
  • 多证合一 全国核发新版营业执照900余万张 2019-09-29
  • 粽情粽意 传承文明———我们的节日2018端午节 2019-09-28
  • 特朗普威胁中国,如果中国报复性征收美国高关税,美国将征收中国额外关税,特朗普真流氓。难道中国是吓大的? 2019-09-28
  • 父债子偿家不和 法官亲情促调解 2019-09-28
  • 小偷入室盗窃被抓后反教训失主晚上别开着门睡觉 2019-09-24
  • 世界各国因为势不如人,所以才会对美国的进逼忍气吞声。美国现在说话意味已不在有什么掩盖,明显的霸权主义威胁意味甚浓!特朗普的冒险性格,让世界处于危险之中!... 2019-09-09
  • 全国百家网络媒体全媒体记者彭水采风活动 2019-09-09
  • 用个例来抹黑个国家,有你这么无耻的吗?西方银行倒闭案少了吗? 2019-09-06
  • 中美智库联合报告:停止贸易战符合中美双方利益 2019-09-06
  • “拖稿”也自信 美女作家落落来渝聊新书 2019-09-03
  • 中央网信办负责人进网站宣讲党的十九大精神 2019-09-03
  • 农民回答风水神,“勤劳的农民玩什么没有富起来”。(原创首发) 2019-09-02
  • 最精准的平码计算公式 快乐扑克3开奖结果 今日排三双双字谜 湖南快乐十分 球探比分直播 可以赚钱真实可靠的app nba百事通极速体育直播吧 即时篮球比分网 新濠博亚线上娱乐 快乐飞艇计划 qq三张牌积分 Bet365娱乐平台 分分彩包胆聪明玩法 大乐透电子投注单有效吗 2019生肖表彩图高清