Задать вопрос
Sc0undRel
@Sc0undRel

Как через AJAX передать $_FILES?

У меня есть форма, которая обрабатывается на ajax. Помогите, пожалуйста, если я добавлю в форму input для загрузки изображений, то как дописать javascript, чтобы он в строке data: отправлял к php файлу также и массив $_FILES... я очень плох в javascript(

<input type="file" name="addmyfile[]" multiple="true">


<form class='add' enctype="multipart/form-data" method='post'>
    <span class='close'>X</span>
    <div class='title'></div>
    <span>Имя: <input name='name' type="text" class="required" /></span>
    <textarea name='text' class="required"></textarea>
    <input type="submit" value='Отправить' />
    <div class='info'></div>
</form>


$("body").on("submit", '.add', function(){
            var form = $('.add').attr("id");
            var data = $(this).serialize();
            var url = document.location.pathname;
            $.ajax({
                type: "POST",
                url: "engine/ajax/my_addotziv.php",
                data: (data+'&url=http://multmult.ru/'+url+'&form='+form),
                success: function(data)
                {
                    $(".add").css('display','none');
                    $(".darkbg").css('display','none');
                    alert(data);
                }
            });
            return false;
        })
  • Вопрос задан
  • 3249 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
inblank
@inblank
Full Stack Web Developer
Под вашу задачу можно так:
$('.add').on('submit', function(){
    var formData = new FormData(this);
    $.ajax({
          type: "POST",
          url: "engine/ajax/my_addotziv.php",
          data:  formData,
          processData: false,
          contentType: false,
          success: function(data){
            // -- code ---
          }
     });
    return false;
});

И смотрим доки по FormData https://developer.mozilla.org/ru/docs/Web/API/FormData
Ответ написан
Adamos
@Adamos
Кусок рабочего кода для медитации:
var data = new FormData();
data.append('file', this.files[count]);
$(form).find('input[type!=file]').each(function () {
  data.append(this.name, this.value);
});
$.ajax({
  'url': ajax_path,
  'type': 'POST',
  'data': data,
  'contentType': false,
  'processData': false,
  'dataType': 'json',
Ответ написан
@devian3000
Никак. Ajax не передаёт файлы.
Лучше найти библиотеку которая это так или иначе делает.
с помощью iframe или как-либо ещё.

Библиотеку выбирайте под задачи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы