Отправка значений и файлов через php ajax

222
13 ноября 2017, 21:58

Видел подобные вопросы но там идет отправка Только файла, а не как у меня Файл + строковые данные формы. Собственно сам вопрос есть форма приводить ее полный код не буду так как там все работает. Сам код ajax который берет данные из формы и отправляет их в обработчик:

 $(document).on("click", "#addbookbuton", function () {
    var data = new FormData();
    var cud;
    cud = $(this).parent('form').children("select[name='idc']").val();
    data.append('idc', cud);
    cud = $(this).parent('form').children('div').children("select[name='ids']").val();
    data.append('ids', cud);
    cud = $(this).parent('form').children('div').children('div').children("input[type='text']").val();
    data.append('name', cud);
    cud = $(this).parent('form').children('div').children('div').children('label').children("input[name='image']").val();
    data.append('image', cud);
    cud = $(this).parent('form').children('div').children('div').children('label').children("input[name='file']").val();
    data.append('file', cud);
    cud = $(this).parent('form').children('div').children("textarea").val();
    data.append('text', cud);
        $.ajax({
            url: 'hys/ajx/booksload.php',
            dataType: 'text',
            cache: false,
            contentType: false,
            processData: false,
            data: data,
            type: 'post',
            success: function(php_script_response){
                //alert(php_script_response);
            }
        });
});

проверяя вкладку "сеть" в консоли браузера вижу что все данные которые нужны уходят в обработчик booksload.php однако как раз данные файлов туда не поступают почему то. к примеру если в файле booksload.php добавить строку

  echo $_POST['name'];

то в консоли в вкладке "сеть" при выборе запроса к обработчику в разделе "ответ" будет показано что данные выводятся, но если поместить проверку файла такого вида

  if (!empty($_FILES['file']['name']) &&  sizeof($_FILES['file']['name']) != 0) {
    echo "sdsd";
} else {
     echo "nooo";
} 

то выдает строку "nooo" - то есть файла по сути не получает, как правильно отправлять такие данные что бы все доходило до обработчика корректно?

Answer 1

Всё же, замените children("input[name='file']").val() на children("input[name='file']").prop('files')[0].

val Вам даст только лишь путь к файлу на Вашем компьютере (что, кстати, для сервера не особо полезная инфа), а вот свойство элемента files - уже куда полезнее, в нём перечислены все файлы (судя по всему их может быть в объекте несколько, я только не знаю зачем, но не суть). Т.к. особо мудрствовать при данной постановке задачи не нужно, поэтому берём просто первый (у программистов он же - нулевой) элемент. Это именно что ни на есть офигенный объект с типом File.

P.S. Как именно устроен сам механизм передачи файла - я не знаю. Можете прочитать и рассказать мне (ну или хотя бы ссылку кинуть).

READ ALSO
Сайт блокирует доступ парсеру

Сайт блокирует доступ парсеру

ЗдравствуйтеИспользую Simple HTML DOM Parser

282
Настройка цены woocommerce

Настройка цены woocommerce

Работаю с wordpress и woocommerce недавноСайт по продаже золотых изделий

250
Phpdoc для ассоциативных массивов

Phpdoc для ассоциативных массивов

Можно ли с помощью phpdoc задокументировать массив так, чтобы при разработке, IDE подставляла информацию (ключ массива) из документации phpdoc?

239