2013-08-02 48 views
0

我想创建一个progree更新模块,当用户从我的html5前端保存一些数据。我有下面的代码,但它似乎并没有工作。我只是没有得到任何百分比完成的值。任何想法为什么这可能会失败。jQuery ajax进度

该web服务是c#asmx服务。

$.ajax({ 
    xhr: function() 
    { 
     if (window.ActiveXObject) { 
      return new window.ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     else { 
      var xhr = new window.XMLHttpRequest(); 
      xhr.upload.addEventListener("progress", function (evt) { 
       if (evt.lengthComputable) { 
        var percentComplete = evt.loaded/evt.total; 
        //Do something with upload progress 
        console.log(percentComplete); 
        alert(percentComplete); 
       } 
      }, false); 

      xhr.addEventListener("progress", function (evt) { 
       if (evt.lengthComputable) { 
        var percentComplete = evt.loaded/evt.total; 
        console.log(percentComplete); 
        alert(percentComplete); 
       } 
      }, false); 
      return xhr; 
     } 
    }, 
    type: "POST", 
    url: "../service.asmx/SaveSession", 
    cache: false, 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify(DTO), 
    dataType: "json", 
    async:false, 
    success: function (response) { 
     result = response; 
     IsDataDirty = false; 
    }, 
}); 

回答

1

使用下面的代码:

{ 
    xhr: function() { 
     var xhr = $.ajaxSettings.xhr(); 
     if (xhr.upload) { 
     xhr.upload.addEventListener('progress', function(e) { 
     var percentage = event.loaded/event.total * 100; 
       //..... 
     }, false); 
     } 
     return xhr; 
     }); 
    } 
+0

我使用的IE 10,不能得到它的工作。可变百分比从来没有得到任何价值。 – user1144596

+0

@ user1144596显然'event.loaded/event.total * 100'应该是'e.loaded/e.total * 100' – zsong

+0

还没有运气,我在IE 10上。改变了event.loaded到e.loaded。不工作。 – user1144596