В настоящее время я разрабатываю настраиваемый модуль, содержащий форму и представленную «через» ajax.
поле
<input type="file" id="file" name="file" accept="image/*" disabled="disabled" />
ajax submit (с json)
$.ajax({ type: "POST", url: "modules/mod_custom_form/submit_form.php", data: dataString, dataType: "JSON", timeout: 6000, success: function(response) { // on success if (response.success === 1) { $('#customForm').html("<div id='message'></div>"); $('#message').html("<h2>Form sent!</h2>") .append("<p>More text.</p>") .hide() .fadeIn(1500, function() { $('#message').append("<img id='checkmark' src='modules/mod_custom_form/images/check-icon.png' />"); }); } // on failure else { $('#customForm').html("<div id='message'></div>"); $('#message').html("<h2>Failure.</h2>"); } } });
Файл submit_form.php
// no direct access define('_JEXEC', 1); define( 'DS', DIRECTORY_SEPARATOR ); define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] ); require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' ); require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' ); require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' ); $mainframe =& JFactory::getApplication('site'); // sender email $email = 'maarten@mail.com'; $subject = 'Aanvraag'; // create the header array $headers = array(); $headers[] = "MIME-Version: 1.0"; $headers[] = "Content-type: text/html; charset=iso-8859-1"; $headers[] = "From: beheer <maarten@mail.com>"; $headers[] = "Bcc: beheer <maarten@mail.com>"; $headers[] = "Reply-To: Recipient Name <receiver@domain3.com>"; $headers[] = "Subject: {$subject}"; $headers[] = "X-Mailer: PHP/" . phpversion(); // get all posted data and put them in variables $bedrijfsnaam = $_POST['bedrijfsnaam']; $_FILES = $_POST['uploaded_file']; // create the full message $message = 'email'; // send mail if (mail($to, $subject, $message, implode("\r\n", $headers))) { //save file function getInput($_FILES); // return message echo json_encode(array('success' => 1)); // insert the email into the database $database =& JFactory::getDBO(); $query = "INSERT INTO #__email_forms (mid, email, message) VALUES ('2', 'myemail@mail.com', '$message')"; $database->setQuery($query); $database->query(); } else { echo json_encode(array('success' => 0)); }
Как реализовать возможность загрузки файла и сохранения формы с помощью ajax? Я искал часы, но пока не нашел ничего полезного.
Заранее благодарим за ваш совет.
Загрузка файлов Ajax является сложной задачей, особенно если у вас есть данные сеанса, чтобы гарантировать, что пользователю действительно разрешено делать это. Это становится еще более опасным, когда это публичная загрузка, так как вам нужно сделать гораздо больше проверки на стороне сервера.
То, что я обычно использую для загрузки ajax, – это загрузчик файлов Ajax по валунам: https://github.com/valums/file-uploader
Это довольно просто, чтобы работать, и у него есть плагин jQuery, а также сделать его еще проще (поскольку вы уже используете jQuery).