За последние 24 часа нас посетил 17531 программист и 1673 робота. Сейчас ищут 1953 программиста ...

Передача файла через AJAX

Тема в разделе "JavaScript и AJAX", создана пользователем feelz, 2 сен 2017.

Метки:
  1. feelz

    feelz Новичок

    С нами с:
    22 авг 2017
    Сообщения:
    10
    Симпатии:
    0
    Доброго времени суток, господа.
    Есть тестовая форма с одним [input=file], которая вполне успешно отправляет файл через ajax на сервер. Однако нужно переместить ее содержимое в рабочую форму, т.е. организовать передачу файла не через submit, а через, допустим, .click() с кнопки "Загрузить".
    Проблема в том, что не найти альтернативы:

    Код (Javascript):
    1. $("form[name='uploader']").submit(function(e) {
    2.         var formData = new FormData($(this)[0]);
    ибо пример, подобный тому, что ниже, уже не воспринимается php-шными процедурами.
    Код (Javascript):
    1. $("#butUpload").click(function(e) {
    2.         var formData = new FormData($(form[input='file']));
    То есть, значение совсем не то. В идеале, вместе с самим файлом, нужно зацепить значение текстового поля и присовокупить к formData - или как-то иначе добавить в AJAX-запрос.

    Весь код JS, который не работает:
    Код (Javascript):
    1. $("#upload").click(function() {
    2.         var formData = new FormData($("form[input='file']"));
    3.         $.ajax({
    4.             url: 'ajax.php',
    5.             type: "POST",
    6.             data: formData,
    7.             async: false,
    8.             success: function (msg) {
    9.                 alert(msg);
    10.             },
    11.             error: function(msg) {
    12.                 alert('Ошибка!');
    13.             },
    14.             cache: false,
    15.             contentType: false,
    16.             processData: false
    17.         });
    18.     });
    Просьба больно тапками не кидаться, только начинаю вникать в JS + PHP.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.798
    Симпатии:
    1.331
    Адрес:
    Лень
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    При чем тут php? Вы документацию по FormData читали? В конструктор FormData должна быть передана форма. А вы пытаетесь передать непойми что. Что по-вашему вернет селектор "form[input='file']"?

    По-моему он должен найти и вернуть <form input='file'>blahblahblah</form>. У вас такое есть? С невалидным атрибутом?
    Далее. При чем тут вообще FormData, когда у вас цель - поменять событие, инициирующее отправку?
    Ну так сохдавай formData с цельной формы, а потом делай append нужных данных :)