Ошибка загрузки файла php ajax

Я хочу загрузить файл с помощью ajax, но я не получаю данные в php $_FILES и я получаю его в $_REQUEST . Как мне это сделать. Ниже мой jquery code.Ajax не работает для загрузки файлов, поэтому есть какой-либо код, чтобы я мог объединиться с существующим кодом для процесса загрузки файлов.

 <script> jQuery(function($){ jQuery('#btn').click(function(){ var data = {}, ticks = []; $('.ajax_elements').each(function(_, elem) { data[this.id] = this.value; }); $.ajax({ type : 'POST', url : 'app_process.php', data : data, cache : false }).done(function(result) { alert(result); }); }); }); </script> <form name="frm" enctype="multipart/form-data"> <input type="text" name="bb" class="ajax_elements" id="one"/> <input type="file" class="ajax_elements" name="passport" id="passport" /> <input type="button" name="bttn" id="btn" /> </form> 

здесь есть код файла php

 <?php if($_REQUEST['passport']!=''): $uploaddir = 'images/'; move_uploaded_file($_FILES["file"]["tmp_name"], $uploaddir . str_replace(" ","_",$_REQUEST['passport'])); endif; ?> 

сообщение об ошибке

Примечание . Неопределенный индекс: файл в G: \ xampp \ htdocs \ data_ajax \ app_process.php в строке 5

Я бы посоветовал посмотреть на XMLHttpRequest , FormData и File API. В Mozilla Developer Network есть отличная документация по всем этим.

Это требует тестирования и настройки, чтобы быть более надежными в вашей среде разработки, но что-то вроде этого может помочь вам начать …

 <script> $('#btn').click(function() { var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("load", function(e){ // stuff to do when upload is complete }, false); xhr.upload.addEventListener("progress", function(e){ // stuff here to handle progress bars, progress percentages etc. }, false); xhr.open('POST', 'app_process.php', true); var formdata = new FormData(); var file = $('#passport').get(0).files[0]; formdata.append('passport', file); xhr.send(formdata); }); </script> 

И PHP …

 <?php if (isset($_FILES['passport'])) { $uploaddir = 'images/'; $upload = move_uploaded_file($_FILES['passport']['tmp_name'], $uploaddir . str_replace(" ","_",$_FILES['passport']['name'])) or exit('Upload failed.'); } else { exit('File not found'); } ?> . <?php if (isset($_FILES['passport'])) { $uploaddir = 'images/'; $upload = move_uploaded_file($_FILES['passport']['tmp_name'], $uploaddir . str_replace(" ","_",$_FILES['passport']['name'])) or exit('Upload failed.'); } else { exit('File not found'); } ?> 

Любая дополнительная информация, которую вы хотите отправить вместе с файлом, должна быть добавлена ​​в объект FormData . Они появятся в переменной PHP $_POST .

 formdata.append('field', 'data'); 

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

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

 $('#passport').change(function() { ... 

Надеюсь, это поможет.

Существует 2 проблемы:

Вам нужно добавить атрибут enctype="multipart/form-data" в теге формы, если вы хотите загрузить файлы:

замещать

 <form name="frm"> 

от

 <form name="frm" enctype="multipart/form-data" > 

С помощью ajax (и jquery) вы не можете отправить файл напрямую. Но я предлагаю вам этот плагин jquery form, который может помочь вам с этим