2011-11-18 2 views
1

У меня есть site, что я работаю над тем, что мне нужно выяснить, когда закончен последний вызов ajax ... Я использую этот jQuery plugin, и все работает отлично, но проблема заключается в том, что клиент загружает 2 файла одновременно. и мне нужно перенаправить на другую страницу после последнего вызова ajax. Если вы посмотрите на него в firebug при загрузке файлов, он дважды запускает http://dev.posnation.com/test/j/example/upload.php, и мне нужно перенаправить страницу после и только после второго запуска. Есть ли способ в javascript или jQuery, чтобы узнать, завершены ли вызовы ajax.Есть ли способ узнать, завершен ли последний вызов ajax?

Вот код, который инициализирует его

// Initialize the jQuery File Upload widget: 
$('#fileupload').fileupload(); 

и есть функция onDone в jQuery.fileupload.js

_onDone: function (result, textStatus, jqXHR, options) { 

но погонных после первого запуска не после того, как оба файла загружены .... любые идеи о том, как я могу перенаправить на другую страницу после того, как оба файла загружены .... заблаговременно

ответ

3

Короткий ответ заключается в уменьшении счетчика в onDone ca llback. один из возможных реализаций будет использовать глобальную переменную, как показано ниже:

var numberFilesToUpload = 2; 

// code to upload file 
onDone: function() { 
// this is the upload plug-ins callback function 
numberFilesToUpload--; 
if (numberFileToUpload == 0) { 
    windows.location.href = "/uploading-finished"; 
} 
} 

есть более элегантные решения, но все они будут связаны с декремента счетчика.

+0

В какой файл я могу поместить var numberFilesToUpload = 2; и находится ли он в верхней части файла – Trace

+0

Что делать, если кто-то терпит неудачу и не возвращается? Или вы не хотите перенаправлять в этот момент? В этот момент ваш счет будет поврежден. – griegs

+0

Глобальные переменные загрязняют ваш объем. – steveyang

3

Вы можете использовать closure для создания функции, в которой есть локальные записи для загруженных файлов.

var fileUploads = function (filesNum, callback) { 
    var numberFilesToUpload = filesNum; 
    // code to upload file 
    return function() { 
    // this is the upload plug-ins callback function 
    numberFilesToUpload--; 
    if (numberFileToUpload == 0) { 
     callback(); 
    } 

    }; 

}(2, function() { 
    //what you want to do when files are all uploaded. 
}); 

fileUploads запустит функцию callback после 2 файлы загружены. Обратные вызовы и ограничения файлов указаны в этой строке

var fileUploads = function() { 
    //... 
} (2, function() {}); 
+0

это будет пример более элегантного решения, которое уменьшает счетчик. отлично сработано. – Jason

Смежные вопросы