Доступ к файлам, размещенным через AJAX, с использованием переменной $_FILES

Попытка научиться использовать новую загрузку файлов AJAX вместо использования iframe или старой доброй загрузки файлов только PHP. Я понимаю, как работают запросы XHR, и уже давно использую jQuery $.post. Но я не могу получить этот.

Причина: когда я публикую данные (файл, который хочу загрузить), я могу получить к ним доступ только через $_POST global, а не требуемый $_FILES global. Вот некоторые из моего кода очень быстро:

<input type="file" id="file"/>
<input type="submit" id="submit" value="Upload" />
$("#file").on("change",function () {
  var file = this.files[0];
}
$("#submit").click(function () {
  var formData = new FormData();
  formData.append('file',file);

  $.ajax({
    url: '<?php echo BASE_URL; ?>ajax/upload.php', // point to server-side PHP script 
    dataType: 'text',  // what to expect back from the PHP script, if anything
    cache: false,
    contentType: false,
    processData: false,
    data: formData,                         
    type: 'post',
    success: function(php_script_response){
      alert(php_script_response); // display response from the PHP script, if any
    }
  });
});

В сценарии PHP, когда я var_dump $_POST, я получаю файл, но когда я var_dump $_FILES там ничего нет. Я нашел эти ресурсы, но они, похоже, не работают для меня:


person Joshua    schedule 19.06.2015    source источник
comment
Я отредактировал заголовок, чтобы описать вашу точную проблему. Использование очень конкретного заголовка помогает привлечь больше внимания к вопросу. Я улучшил форматирование блока кода, перечислил ресурсы (это было не очень понятно из-за / между ними), а также заглавные аббревиатуры.   -  person Harry    schedule 20.06.2015


Ответы (1)


Для заполнения массива $_FILES тип контента должен быть multipart/form-data

Попробуйте вместо:

contentType: false,

Помещать:

contentType: "multipart/form-data",
person taxicala    schedule 19.06.2015
comment
Ура! Это имеет смысл! Как я могу это сделать? - person Joshua; 19.06.2015
comment
‹form action=yoururl.php method=post enctype=multipart/form-data› - person Robin; 19.06.2015
comment
@taxicala Хорошо, теперь он говорит: «Отсутствует граница в данных POST multipart / form-data, я думаю, я понятия не имею, что это значит». - person Joshua; 19.06.2015
comment
@taxicala Я все еще не могу заставить это работать. Я посмотрел свою ошибку, и я не могу найти решение. - person Joshua; 19.06.2015