Intereting Posts
Вставить данные массива в mysql php PHP, что лучше всего подходит для использования XML? Нужно создавать и анализировать ответы XML Плагин формы jQuery: XMLHttpRequest не может загрузить http: // www … No 'Access-Control-Allow-Origin' Изменить URL-адрес администратора WordPress Вызов функции php с помощью события onclick PHP SQL: как сохранить данные в несколько баз данных из одной формы html или как автоматически копировать данные из одной базы данных в другую базу данных Как выбрать отдельный запрос с помощью построителя запросов symfony2? подтвердите адрес электронной почты .edu или .ac Вставка из массива имеет несколько уровней для базы данных с использованием php PHP-массив заменяет номера ключами отладка веб-приложения Yii с использованием Zend Debugger в Eclipse php vs bash для CLI-скриптов? Добавьте «Недавние сообщения» из блога WordPress в статическую страницу html ветка для построения ветвей в петле Лучший способ сделать онлайн-словарь?

Загрузка файла в php через ajax

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

Из-за этого я передаю все свои данные формы через некоторую простую проверку в jquery и отправлю ее обработчику php через ajax. Вот основной взгляд на то, как я это делаю …

var first_name = $(sender + ' #first_name'); var email = $(sender + ' #email'); var tel = $(sender + ' #telephone'); var comments = $(sender + ' #comments'); $.ajax({ type: 'POST', url: 'sendmail.php', data: { first_name: first_name.val(), email: email.val(), telephone: tel.val(), comments: comments.val(), success: function clearFields() { first_name.val(''); email.val(''); tel.val(''); comments.val(''); alert('Thank you. We will contact you as soon as possible.'); } } }); 

Добавив поле ввода файла в одну из следующих форм, у меня возникают проблемы с загрузкой. Хотя письмо отправляется правильно, я не думаю, что ajax отправляет любые пригодные для использования данные для загрузки в файл php

 <input type="file" name="upload" id="upload" /> <script> var upload = $("#upload"); $.ajax({ type: 'POST', url: 'sendmail.php', data: { first_name: first_name.val(), email: email.val(), telephone: tel.val(), upload: upload.val(), comments: comments.val(), success: function clearFields() { first_name.val(''); email.val(''); tel.val(''); upload.val(''); comments.val(''); alert('Thank you. We will contact you as soon as possible.'); } } }); </script> 

Я нашел несколько вариантов для этого, но все те, на которые я смотрел, такие, как кажется, кажутся мне «хакерскими».

Есть ли более простой способ сделать это?

Вы должны сделать это через IFrame

Таким образом, вы создаете скрытый iframe

 <iframe id="upload_target" name="upload_target" style="display: none;" src="#"></iframe> <!-- note the src="#" --> 

Затем вы создаете форму с помощью кнопки и всех полей, которые вы хотите

 <form action="path/to/uploadscript.php" method="POST" enctype="multipart/form-data" target="upload_target"> <!--target will tell the browser to run it in the iFrame with name="upload_target" --> 

то в uploadscript.php вы можете использовать все значения формы, как если бы они были регулярными значениями $ _POST:

 <?php upload_file($_FILES['file'], $_POST['name'], $_POST['whatever']); ?> 

Это почти похоже на использование AJAX.

Ajax не поддерживает операцию загрузки file . Но есть много плагинов, которые используют iframes для загрузки файлов асинхронно. Подробнее об этом методе вы можете прочитать здесь .

Несколько плагинов jQuery, поддерживающих загрузку форм,
1. Форма jQuery
2. jQuery-File-Upload

На многих сайтах Q & A есть много вопросов, касающихся этого вопроса.

Другое решение, использующее html 5, обсуждается здесь, где используется FormData.