2016-08-09 4 views
-1

У меня есть форма, внутри которой я хочу иметь «виртуальную форму», которая обрабатывает вложения файлов. У меня есть файл-ввод и кнопка для отправки файла.Формат AJAX POST с PHP

Проблема заключается в том, что мой PHP поддерживается получает только POST и со структурой:

"file"; filename="xxx.jpg" 
Content-type: image/jpeg 

. 
. 
. 

где точки представляют собой двоичные данные из файла.

Из того, что я прочитал, должны быть переменные $_FILES и $_POST, но я их не получаю.

Вот соответствующий codelines в HTML и в Javascript:

<input type="file" id="file-to-append" name="file-attachment"> 
<input type="button" onClick="append_file()" value="Add file"> 

function append_file() { 
var formData = new FormData(); 


console.log(jQuery('#file-to-append')); 
    formData.append('file', jQuery(":file")[0].files[0]); 

    jQuery.ajax({ 
     url : 'file_upload.php', 
     type : 'POST', 
     data : formData, 
     processData: false, 
     success : function(data) { 
      console.log(data); 
      alert("Added"); 
     } 
    }); 
} 

Может кто-нибудь место или знать, где проблема?

+0

I bet, у вас нет атрибута 'enctype' в теге' form'. –

+0

опубликуйте полную форму. – jaysingkar

+0

enctype не имеет значения, в данном случае – user3284463

ответ

-1

Используйте правую encrypte в форму

<form id="data" enctype="multipart/form-data" method="post" > 
<input type="submit" value="Add file"> 
</form> 

использование Ajax Submit

$("form#data").submit(function() 
{var formData = new FormData($(this)[0]); 
$.ajax({ 

        url: "filename.php", 
        type: 'POST', 
        data: formData, 
        async: false, 
        success: function (data) 
        { 
          var jsonData = $.parseJSON(data); 
          var errFlag =jsonData.errorFlag; 
          var errMsg =jsonData.errorMessage; 

          if(errFlag == 1) 
          { 
           //successmessage; 
          } 
          else 
          { 
           //errormessage; 
          } 
        }, 
        cache: false, 
        contentType: false, 
        processData: false 

       }); 
       return false; 


}); 
0

данные правильно проходя таким образом, нет никаких проблем с вызовом Ajax.

Вы получаете файл-объект в PHP, используя супер глобальный $_FILES.

В вашем случае, вы будете использовать это нравится:

$file = $_FILES['file']; 
echo $file['name']; 
echo $file['tmp_name']; 
. 
. 
. 

Для того, чтобы посмотреть на $_FILES массива вы можете:

echo "<pre>"; 
print_r($_FILES); 
echo "</pre>"; 
0

Вещи становятся незнакомцу и незнакомец. Я получил его работу, но только в IE 11, установив contentType: «multipart/form-data». В Chrome он вообще не работает с этим параметром.

Я пробовал с contentType: false, но он не работает на любой платформе, хотя это должно быть правильно (TM): /.

Я также добавил enctype-setting во внешнюю форму, но мне интересно, как это могло бы помочь, потому что я не отправляю (целую форму), а только добавляю вещи «внутри» основной формы (которую я сам обрабатываю). По-видимому, это тоже не помогло.

Это не должно быть проблемой, но по какой-то причине я застрял с этой реализацией AJAX, хотя я использовал загрузки файла, так давно (два номера рисунка) ...

мотка