jq上传视频时长php,jQuery+formdata做出上传进度特效(附步骤代码)

这次给大家带来jQuery+formdata做出上传进度特效(附步骤代码),jQuery+formdata做出上传进度特效的注意事项有哪些,下面就是实战案例,一起来看一下。

问题列表

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,

XHR的upload属性指向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() {

//语法错误

}

}

});

我们可以借助XHR的onsendstart事件,如下:$.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参数,即不能通过。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery File Upload 是一个 jQuery 图片上传组件,支持多文件上传、取消、删除,上传前缩略图预览、列表显示图片大小,支持上传进度条显示;支持各种动态语言开发的服务器端。 特征: 1、多文件上传: 允许一次选择多个文件并同时上传。 2、拖放支持: 允许通过从桌面或文件管理器中将文件拖放到浏览器窗口中来上传文件。 3、上载进度条: 显示一个进度条,指示单个文件和所有组合上载的上载进度。 4、可取消的上传: 可以取消单个文件的上传以停止上传进度。 5、可恢复的上传: 可以使用支持Blob API的浏览器恢复中止的上传。 6、批量上传: 大型文件可以使用支持Blob API的浏览器以较小的块上传。 7、客户端图像调整大小: 可以使用支持所需JS API的浏览器在客户端上自动调整图像大小。 8、预览图像,音频和视频: 使用支持所需API的浏览器上载之前,可以显示图像,音频和视频文件的预览。 9、无需浏览器插件(例如Adobe Flash): 该实现基于HTML5和JavaScript等开放标准,并且不需要其他浏览器插件。 10、旧版浏览器的优美回退: 如果支持,则通过XMLHttpRequests上传文件,并使用iframe作为旧版浏览器的回退。 11、HTML文件上传表单后备: 通过使用标准HTML文件上传表单作为小部件元素,可以逐步增强功能。 12、跨站点文件上传: 支持使用跨站点XMLHttpRequest或iframe重定向将文件上传到其他域。 13、多个插件实例: 允许在同一网页上使用多个插件实例。 14、可自定义和可扩展: 提供API来设置各个选项并为各种上传事件定义回调方法。 15、分段和文件内容流的上传: 可以将文件作为标准的“分段/表单数据”或文件内容流(HTTP PUT文件上传)进行上传。 16、与任何服务器端应用程序平台兼容: 支持标准HTML表单文件上传的任何服务器端平台(PHP,Python,Ruby on Rails,Java,Node.js,Go等)均可使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值