/ / XHR nie je spúšťanie, kým nahrávanie nedokončí? - javascript, jquery, ajax, cordova, xmlhttprequest

Pokračovanie udalosti XHR nie je vypálené, kým nahrávanie nie je dokončené? - javascript, jquery, ajax, cordova, xmlhttprequest

Používam nasledujúci príkaz $ .axax na odovzdanie súboru z aplikácie PhoneGap:

function updateProgress( evt ) {
if ( evt.lengthComputable ) {
var percentComplete = evt.loaded / evt.total * 100;
console.log( percentComplete + "%" );
}
}

$.ajax({
url: url,
type: "POST",
data: data,
cache: false,
dataType: "json",
processData: false,
contentType: false,
success: successCallback,
error: errorCallback,
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.addEventListener( "progress", updateProgress, false);
return xhr;
}
});

Odovzdávanie funguje v poriadku. Udalosť postupu sa však po dokončení odovzdávania obnoví iba raz. Počas nahrania sa v skutočnosti nevzdáva - tak sa v skutočnosti nezobrazuje pokrok nahrávania. Počas nahrania je len pauza a potom sa zobrazí 100%.

Akékoľvek nápady, čo robím zle?

odpovede:

11 pre odpoveď č. 1

Odovzdanie progress udalosti sú vypálené xhr.upload, takže pripojte poslucháča skôr, než xhr, Tam sú tiež progress udalosti na xhr objekt, ale toto je pre odpoveď, ktorá sa vráti zo servera.

vidieť článok MDN pre viac detailov.

xhr.upload.addEventListener("progress", updateProgress, false)

(Vďaka A. Wolffovi a jeho poznámke k OP.)