Шрифт:
var uploading = false;
console.log(target.url);
target.ondragenter = function(e) {
console. log("dragenter");
if (uploading) return; // Игнорировать попытку сброса, если
// элемент уже занят выгрузкой файла
var types = e.dataTransfer.types;
if (types &&
((types.contains && types.contains("Files")) ||
(types.indexOf && types.index0f("Files”) !== -1))) {
target.classList.add("wantdrop");
return false;
}
};
target.ondragover = function(e) {
if (!uploading) return false;
};
target.ondragleave = function(e) {
if (!uploading) target.classList.remove("wantdrop");
};
target.ondrop = function(e) {
if (uploading) return false;
var files = e.dataTransfer.files;
if (files && files.length) {
uploading = true;
var message = "Выгружаются файлы:<ul>";
for(var і = 0; і < files.length; i++)
message += "<li>" + files[i].name + "</li>";
message += "</ul>";
target.innerHTML = message;
target.classList.remove("wantdrop");
target.classList.add("uploading");
var xhr = new XMLHttpRequest;
xhr.open("POST", url);
var body = new FormData;
for(var i=0; і < files.length; i++)
body.append(i, files[і]);
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
target.innerHTML = message +
Math.round(e.loaded/e.total*100) +
"% Завершено";
}
};
xhr.upload.onload = function(e) {
uploading = false;
target.classList.remove("uploading");
target.innerHTML = "Отбуксируйте сюда файл для выгрузки";
};
xhr.send(body);
return false;
}
target.classList. removefwantdrop");
}
}
});
18.1.5. Прерывание запросов и предельное время ожидания
Выполнение HTTP-запроса можно прерывать вызовом метода
abort
объекта XMLHttpRequest
. Метод abort
доступен во всех версиях объекта XMLHttpRequest
, и согласно спецификации «XHR2» вызов метода abort
генерирует событие «abort». (На момент написания этих строк некоторые броузеры уже поддерживали событие «abort». Наличие этой поддержки можно определить по присутствию свойства onabort
в объекте XMLHttpRequest
.)