При загрузке файла через ajax он всегда возвращает [ как информацию о файле

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

Я просмотрел много разных вопросов, и я до сих пор не смог найти ошибку в своем коде. Я в основном пытаюсь загрузить файл на сервер, используя html / ajax и php для серверной части. Ниже приведен мой код:

  //HTML
<div class="col-sm-6">
  <div class="">
     <input name="bugType" type="text" class="bugType">
  </div>
 </div>
 <div class="col-sm-6">
    <div class="upload">
       <input name="bugImage" type="file" class="bugImage">
    </div>
 </div>

//JS 
$("#addBug").on('click', function (event) {
    event.preventDefault();
    var bugType = $('input[name="bugType"]').val();
    var imageName = $('input[name="bugImage"]');
    fd = new FormData();
    fd.append("type", "add");
    fd.append("imageName", imageName);
    fd.append("bugType", bugType);
    $.ajax({
        url: 'classes/bug-class.php',
        type: "POST",
        dataType: "json",
        data: fd ,
        enctype: 'multipart/form-data',
        contentType: false, 
        processData: false,  
        success: function (data) {
            alert("SUCCESS");
            alert(data);
        },
        error: function (data) {
            alert("FAILURE");
            console.log(data);
        }
    });
});



//PHP
$type = $_POST['bugType'];
$image = $_POST['imageName'][0];
echo $image; //PRINTS OUT [
  

Если я изменю:

   $image = $_FILES['imageName']
  echo $image // PRINTS OUT ""
  

Спасибо за помощь!

//РЕДАКТИРОВАТЬ

  FileList {0: File, length: 1}
 0
 :
 File
 lastModified
 :
 1475177716000
 lastModifiedDate
 :
 Thu Sep 29 2016 14:35:16 GMT-0500 (CDT)
 name
 :
 "17-3.png"
 size
 :
 187682
 type
:
"image/png"
webkitRelativePath
:
  

«»
прото

:
Файл
длина
:
1
прото

:
Список файлов

 var_dump($_FILES) // output -> array(0)
  

//РАБОТАЕТ

пришлось изменить на это:

   fd.append("imageName", imageName[0])
  

и тогда это сработало!

Комментарии:

1. попробуйте console.log(fd) опубликовать вывод.

2. $('input[name="bugImage"]')[0].files

3. @KarthikeyanSekar Теперь он отправляет файл, и я получаю на стороне php: object FileList … однако, когда я пытаюсь получить к нему доступ как обычно, получается то же самое

4. $_FILES['bugImage']['name'] попробуйте это php.net/manual/en/features.file-upload.post-method.php

Ответ №1:

Вы напрямую отправляете элемент на свой SERVER .

 var imageName = $('input[name="bugImage"]');


var imageName = $('input[name="bugImage"]')[0].files; 
  

Комментарии:

1. Хорошо, и какой будет php-сторона этого … разве это не должно быть стандартным $image = $_FILES[‘imageName

2. $_FILES[‘bugImage’][‘name’] попробуйте это php.net/manual/en/features.file-upload.post-method.php

3. хммм… Я пошел дальше и попробовал это, и он вывел «»

4. На самом деле я получаю: неопределенный индекс: imageName … это означает, что он не должен корректно нажимать на него

5. пришлось отправить fd.append(«imageName», imageName[0]), и тогда это сработало!