jQuery相当于XMLHttpRequest的上传?

使用HTML5的File API,上传是通过XMLHttpRequest名为upload的对象完成的。 这是我正在使用的教程(以及Google缓存镜像,因为它现在已经关闭)。 这是相关部分:

 // Uploading - for Firefox, Google Chrome and Safari xhr = new XMLHttpRequest(); // Update progress bar xhr.upload.addEventListener("progress", function (evt) { 

如您所见,为了跟踪上传进度, XMLHttpRequest对象有一个名为upload的属性,我们可以添加一个事件处理程序。

我的问题是: jQuery是一个等价的吗? 。 我试图让代码尽可能干净,并且尽可能地跨浏览器兼容,因为每当微软认为这是一个好主意时(虽然它听起来像是在2012年或2013年 )。

以下是我想出来解决这个问题的方法。 $ .ajax()调用允许提供回调以生成XHR。 我只是在调用请求之前生成一个,设置它然后创建一个闭包以在$ .ajax()需要它时返回它。 如果他们只是通过jqxhr访问它就会容易得多,但事实并非如此。

 var reader = new FileReader(); reader.onloadend = function (e) { var xhr, provider; xhr = jQuery.ajaxSettings.xhr(); if (xhr.upload) { xhr.upload.addEventListener('progress', function (e) { // ... }, false); } provider = function () { return xhr; }; // Leave only the actual base64 component of the 'URL' // Sending as binary ends up mangling the data somehow // base64_decode() on the PHP side will return the valid file. var data = e.target.result; data = data.substr(data.indexOf('base64') + 7); $.ajax({ type: 'POST', url: 'http://example.com/upload.php', xhr: provider, dataType: 'json', success: function (data) { // ... }, error: function () { // ... }, data: { name: file.name, size: file.size, type: file.type, data: data, } }); }; reader.readAsDataURL(file); 

jqXHR(从jQuery的.ajax()调用返回的XMLHttpRequest的超集)的文档没有将更新function描述为公开,这并不意味着它没有公开。 但是, 这个问题似乎表明上传不会暴露。 答案提供了一种获取本机XMLHttpRequest对象的方法。

在jQuery 1.5之前的版本中,XMLHttpRequest对象直接公开,因此您可以访问浏览器支持的任何function。 这个用于构建拖放上传器的教程就是这样做的。

搜索jquery html 5文件上传会调出此插件 ,使用HTML 5文件API进行多个文件上传,但此插件目前无法在IE中使用。 如果您不想使用HTML 5,而是希望现在支持跨浏览器,那么您可以在jQuery插件站点上查看jQuery的其他插件。