В моей форме используются предупреждения 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.