AJAX
или более подходящим образом XMLHttpRequest
пока не поддерживает загрузку файлов.Есть обходные пути, такие как загрузка через <iframe>
, но это довольно громоздко.Ваше время будет лучше потрачено на создание приложений, а не на переосмысление этих решений.
Но если вас интересует, как это работает внутри, то не стесняйтесь проверить исходный код некоторых плагинов, которые предлагают эту функцию.По этой ссылке можно найти очень простое объяснение - http://www.openjs.com/articles/ajax/ajax_file_upload/
По сути, вы изменяете форму target
для отправки внутри <iframe>
, таким образом избегая обновления страницы и имитируя AJAX, который нена самом деле, но кого это волнует - конечный пользователь не может сказать.
Минимальный пример загрузки на основе iframe может выглядеть следующим образом:
$("#upComplete").click(function() {
// create a dynamic iframe, or use existing one
var iframe = $("<iframe id='f' name='f' src=''>");
// attach a load event to handle response/ know about completion
iframe.load(function() { alert('complete'); });
iframe.appendTo('body');
// change form's target to the iframe (this is what simulates ajax)
$('#uploadForm').attr('target', 'f');
$('#uploadForm').submit();
});
Обратите внимание, что это не таклюбая обработка ответа, но просто отправляет изображение на сервер.Чтобы обработать ответ, обратный вызов должен быть написан для события iframe load
.