Отправлять файл черех AJAX - не простая задача. Есть несколько способов. Самый простой - если используются современные браузеры - использовать объект FormData. Этот JS класс умеет преобразовывать поля разного типа, включая file.
<form id="form" action="send.php" method="post" enctype="multipart/form-data">
<input type="file" name="UploadForm[attachment][]" multiple="">
<button type="submit" class="btn btn-primary input-lg">Submit</button>
</form>
$.ajax({
url: "send.php",
data: new FormData($('#form').get(0)),
cache: false,
contentType: false,
processData: false,
type: 'POST',
error: function(jqXHR, textStatus, errorThrown) { /** @var jqXHR jqXHR */
console.log('error', textStatus, errorThrown);
},
success: function(data, textStatus, jqXHR) { /** @var jqXHR jqXHR */
console.log('success', data);
}
});
Рабочий пример:
форма с аттачментами отправляется через AJAX (кнопка в подвале страницы, извиняюсь)
Варианты без FormData описаны в статье
https://blog.arvixe.com/how-to-send-multipart-data...
Я раньше пользовался фреймами, а потом перешёл на библиотеку
www.dropzonejs.com - она сама подбирает вариант в зависимости от возможностей браузера.