通过XHR的jQuery Ajax进度
我正在尝试捕获ajax请求的进度。
它没有按预期工作。据我所知,id为 progressProdCounter的Div
应该在其中包含%的内容,但在我的情况下什么也没有发生。有帮助吗? __
在我看来,这if (evt.lengthComputable) {
是行不通的XHR
<div id="progressCounter"></div><br><div id="loading">Loading</div><br>
<div id="data"></div>
var progressElem = $('#progressCounter');var URL = "https://api.github.com/users/mralexgray/repos";
$("#loading").hide();
// write something in #progressCounter , later will be changed to percentage
progressElem.text(URL);
$.ajax({
type: 'GET',
dataType: 'json',
url: URL,
cache: false,
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.responseText);
alert(thrownError);
},
xhr: function () {
var xhr = new window.XMLHttpRequest();
//Download progress
xhr.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
progressElem.html(Math.round(percentComplete * 100) + "%");
}
}, false);
return xhr;
},
beforeSend: function () {
$('#loading').show();
},
complete: function () {
$("#loading").hide();
},
success: function (json) {
$("#data").html("data receieved");
}
});
回答:
回答:
ProgressEvent.lengthComputable只读属性是一个布尔型标志,指示ProgressEvent相关的资源是否具有可以计算的长度。如果不是,则ProgressEvent.total属性没有重大价值。
因此,在您的情况下,如果您进行一点调试,您将发现evt.lengthComputable = false;
您无法跟踪进度;
xhr.addEventListener("progress", function (evt) { console.log(evt.lengthComputable); // false
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
progressElem.html(Math.round(percentComplete * 100) + "%");
}
}, false);
回答:
如果lengthComputable
中的false为XMLHttpRequestProgressEvent
,则表示服务器从不发送Content-
Length header响应。
以上是 通过XHR的jQuery Ajax进度 的全部内容, 来源链接: utcz.com/qa/430132.html