प्रगति घटनाओं के लिए XMLHttpRequest स्तर 2 समर्थन का उपयोग कर, मैं HTML5 प्रगति पट्टी को अपलोड करने की कोशिश कर रहा हूं।क्यों XMLHttpRequest ProgressEvent.lengthComputable गलत हो सकता है?
हर उदाहरण आप देख में, विधि इतनी तरह प्रगति घटना के लिए एक घटना श्रोता जोड़ने के लिए है:
req.addEventListener("progress", function(event) {
if (event.lengthComputable) {
var percentComplete = Math.round(event.loaded * 100/event.total);
console.log(percentComplete);
}
}, false);
इस तरह के उदाहरण हमेशा माना कि event.lengthComputable सच हो जाएगा लग रहे हैं। आखिरकार, ब्राउजर उस अनुरोध की लंबाई जानता है जो वह भेज रहा है, निश्चित रूप से?
कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, event.lengthComputable गलत है। मैंने ओएसएक्स पर सफारी 5.1.7 और फ़ायरफ़ॉक्स 12 में इसका परीक्षण किया है।
मेरी साइट Django का उपयोग करके बनाई गई है, और मुझे अपने देव और उत्पादन सेटअप पर एक ही समस्या मिलती है।
पूर्ण कोड मैं प्रपत्र अपलोड उत्पन्न करने के लिए उपयोग कर रहा हूँ नीचे दिखाया गया है (jQuery का उपयोग):
form.submit(function() {
// Compile the data.
var data = form.serializeArray();
data.splice(0, 0, {
name: "file",
value: form.find("#id_file").get(0).files[0]
});
// Create the form data.
var fd = new FormData();
$.each(data, function(_, item) {
fd.append(item.name, item.value);
});
// Submit the data.
var req = new XMLHttpRequest();
req.addEventListener("progress", function(event) {
if (event.lengthComputable) {
var percentComplete = Math.round(event.loaded * 100/event.total);
console.log(percentComplete);
}
}, false);
req.addEventListener("load", function(event) {
if (req.status == 200) {
var data = $.parseJSON(event.target.responseText);
if (data.success) {
console.log("It worked!")
} else {
console.log("It failed!")
}
} else {
console.log("It went really wrong!")
}
}, false);
req.addEventListener("error", function() {
console.log("It went really really wrong!")
}, false);
req.open("POST", "/my-bar/media/add/");
req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
req.send(fd);
// Don't really submit!
return false;
});
मैं इस पर घंटे के लिए मेरे बाल बाहर फाड़ दिया गया है। किसी भी मदद की सराहना की!
मैं इस समस्या का सामना करना पड़ा में होगा। ऐसा लगता है कि FormData() लंबाई बनाता है compputable == झूठी। – est