2012-11-02 31 views
5
$.ajax({ 
    xhr: function() 
    { 
    var xhr = new window.XMLHttpRequest(); 
    //Upload progress 
    xhr.upload.addEventListener("progress", function(evt){ 
     if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total; 
     //Do something with upload progress 
     console.log(percentComplete); 
     } 
    }, false); 
    //Download progress 
    xhr.addEventListener("progress", function(evt){ 
     if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total; 
     //Do something with download progress 
     console.log(percentComplete); 
     } 
     }, false); 
    return xhr; 
    }, 
    type: 'POST', 
    url: "/", 
    data: {}, 
    success: function(data){ 
    //Do something success-ish 
    } 
}); 

因为XHR由jqXHR取代这并不jQuery的1.5+工作(即原始XHR高水平版本)。现在的问题是如何得到它与jqXHR工作... 任何人都知道如何去做吧?有没有办法让jQuery ajax上传进度?

+0

我不认为这是给定的副本后,给定的职位甚至不使用jQuery,而jQuery是这个问题的原因。 –

+0

从jQuery 1.5开始,'$ .ajax()'返回一个jqXHR对象,它实现了Promise接口。我猜你可以使用'$ .ajax(...)。进度(回调)'监视进度。不幸的是,我找不到完整的引用,因此无法通知回调接受哪些参数,尽管它可能与“完成”(成功)回调相同,即。 '函数(data,textStatus,jqXHR){...}'。 ** [jqXHR对象](http://api.jquery.com/jQuery.ajax/#jqXHR)**公开了一堆可以在回调中利用的属性和方法。 –

回答

6

试试这个

$.ajax({ 
    url: path, 
    xhr: function() { 
     var xhr = $.ajaxSettings.xhr(); 
     xhr.upload.onprogress = function (e) { 
      if (e.lengthComputable) { 
       console.log(e.loaded/e.total); 
      } 
     }; 
     return xhr; 
    } 
}).done(function (e) { 

}) 
2

我做了一个jQuery插件来处理上传或下载进度事件以一种简单的方式。适用于任何的jQuery AJAX方法如$阿贾克斯,和$ .get,$的getJSON,$。员额等,您可以从这里下载:https://github.com/cvelazquez/jquery.ajax.progress

var jqXHR = $.post('www.somedomain.com', {data:"real long data, o maybe a file upload"}, function(response){ 
    /* do anything on finish */ 
}); 

$(jqXHR).on('uploading', function(proxyEvent, event){ 
    if (event.lengthComputable) { 
     // You can do anything here 
     console.log("Uploaded " + parseInt((event.loaded/event.total * 100), 10) + "%"); 
    } 
}); 
+0

我可以确认这适用于$ .getJSON请求。 – FizxMike

相关问题