с благодарностью принимаем любую помощь со следующим:Любой способ узнать, завершено ли XMLHttpRequest в отдельной области XMLHttpRequest?
У меня есть сценарий, при котором у меня есть переменное количество файлов Ajax, загружаемых на страницу, каждая из которых содержится в их собственной форме. Во время onSubmit действия каждый образует я называю отдельный метод, называемый PostFile() для выполнения загрузки файла следующим образом:
function PostFile(fileInputId, id) {
var formdata = new FormData();
var fileInput = $('#fileinput' + '_' + id)[0];
formdata.append(fileInput.files[0].name, fileInput.files[0]);
formdata.append("Id", id);
//Creating an XMLHttpRequest and sending
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Bookings/UploadArtwork');
xhr.send(formdata);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
if ($.ajax.active == 0) {
NoOtherFilesBeingUploaded();
}
}
};
}
Моя проблема заключается в том, что я только хочу, чтобы функция NoOtherFilesBeingUploaded(), чтобы работать, если нет никаких других файлов в настоящее время загружается через другие формы на странице; т. е. если в настоящее время нет другого XMLHttpRequest.
Фактически, мне нужен счетчик текущих открытых XMLHttpRequests. Тем не менее, я обнаружил, что ajaxStart() не запускает события XMLHttpRequests, поэтому $ .ajax.active всегда 0.
У кого-нибудь есть идеи?
Заранее спасибо
Update:
Я использую XMLHttpRequest, так что я могу добавить индикатор следующим образом:
xhr.upload.addEventListener("progress", function (event) {
if (event.lengthComputable) {
var percentComplete = Math.round(event.loaded * 100/event.total);
$('#progressNumber_' + id).html(percentComplete.toString() + '% complete');
}
else {
$('#progressNumber_' + id).html('unable to compute');
}
}, false);
Извинения для ухода это из оригинального поста ,
Почему вы создаете свой собственный XHR, когда вы уже используете JQuery? – Blazemonger
Если вы используете ['$ .ajax'] (http://api.jquery.com/jQuery.ajax/), то он создает объект jqXHR, который может вернуть ваша функция. Затем вы можете использовать [отложенные методы] (http://api.jquery.com/category/deferred-object/) на этом объекте в любое время. – Blazemonger
Привет ... спасибо за ответы. Поэтому, если я использую $ .ajax, как здесь: http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax функция ajaxStart() будет увеличиваться с каждым запросом? – ledragon