|
Супер Долгое выполнение скрипта
Всем привет ребята. Скрипт
(function($) { $(function() { jQuery('#quote_form').on('submit', function(e){ e.preventDefault(); jQuery('.btn ').attr('disabled','disabled'); jQuery('#quote_form').addClass('form_sending'); var request = { option : 'com_ajax', module : 'c_form', method : 'sendMail', format : 'row', data: jQuery('#quote_form').serialize(), src: window.location.href, }; jQuery.ajax({ method: 'POST', data: request, }) .success(function(response){ console.log(response); //jQuery(location).attr('href', window.location.origin + '/thanks-you-for-contacting'); }); }); }); })(jQuery); <?php require_once '../../configuration.php'; $jconfig = new JConfig(); $host = $jconfig->host; $dbname = $jconfig->db; $username = $jconfig->user; $password = $jconfig->password; $dbprefix = $jconfig->dbprefix; $db = mysqli_connect($host, $username, $password, $dbname); if (!$db) { die('Ошибка соединения: ' . mysqli_error()); } $stmt = $db->prepare('SELECT params FROM ' . $dbprefix .'template_styles WHERE template = "easy_moving"'); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $params = json_decode($row['params']); mysqli_close($db); $to = $params->email; $subject = $_POST['subject']; $mailheaders = "Content-type:text/html;charset=utf-8rn"; $mailheaders .= "From: SiteRobot <noreply@easy-moving.ca/>rn"; $mailheaders .= "Reply-To: [email]noreply@easy-moving.ca[/email]/"; if ($subject == 'Free Quote') { $message = '<table> <tbody> <tr> <td>Moving From</td> <td>'. $_POST['movingfrom'] .'</td> </tr> <tr> <td>Moving To</td> <td>'. $_POST['movingto'] .'</td> </tr> <tr> <td>Contact Phone</td> <td>'. $_POST['phone'] .'</td> </tr> <tr> <td>Full Name</td> <td>'. $_POST['fullname'] .'</td> </tr> <tr> <td>Email Address</td> <td>'. $_POST['email'] .'</td> </tr> <tr> <td>Moving Date</td> <td>'. $_POST['movingdate'] .'</td> </tr> <tr> <td>What Size?</td> <td>'. $_POST['whatsize'] .'</td> </tr> <tr> <td>How did you hear about us?</td> <td>'. $_POST['howdid'] .'</td> </tr> </tbody> </table>'; } elseif ($subject == 'Free Estimate Online') { $message = '<table> <tbody> <tr> <td>Full Name</td> <td>'. $_POST['fullname'] .'</td> </tr> <tr> <td>Email Address</td> <td>'. $_POST['email'] .'</td> </tr> <tr> <td>Contact Phone</td> <td>'. $_POST['phone'] .'</td> </tr> <tr> <td>Moving From</td> <td>'. $_POST['movingfrom'] .'</td> </tr> <tr> <td>Moving To</td> <td>'. $_POST['movingto'] .'</td> </tr> <tr> <td>Moving Date</td> <td>'. $_POST['movingdate'] .'</td> </tr> <tr> <td>Move Size</td> <td>'. $_POST['movesize'] .'</td> </tr> <tr> <td>Truck Size</td> <td>'. $_POST['trucksize'] .'</td> </tr> <tr> <td>Сomments</td> <td>'. $_POST['comments'] .'</td> </tr> </tbody> </table>'; } else { die('error'); } $res = mail($to, $subject, $message, $mailheaders); echo $res; ?>zz Супер долго выполняется, Я уже не знаю что с ним делать. А проблема в том что пока он выполняется пользователь еще раз 15 жмет на кнопку, думаю что не работает и по итогу приходит 9999 сообщений от пользователя, в зависимость от агрессии. Вышел пока из положения тупо ее заморозить, но при этом и редирект страдает. Друзья подскажите пожалуйста что может быть и как оптимизировать бы это можно? Может как то асинхронно можно? Ссылка https://easy-moving.ca/get-free-quote |
Ну так "размораживай", когда придет ответ от сервера.
Пока не ответил, показывай какой нибудь значок загрузки, что бы пользовал спокойней был. |
Цитата:
Может конечно не в скрипте дело. Cms Joomla |
А Мне бы хотелось, чтобы пользователь увидел типа ну все ок, страницу редиректа. А потом уже все там делалось
|
Не получится. Нельзя послать запрос с одной страницы, а ответ получить на другой.
Тогда сначала делай редирект, и с той страницы посылай запрос. Данные для запроса можно через localStorage передать. |
Такие операции по-хорошему асинхронно выполнять нужно.
Самое простое - складируйте письма, которые нужно отправить в табличку в БД и по крону отправляйте небольшие порции раз в минуту. Для пользователя такие запросы к серверу моментальными должны стать. |
Ну смотрите пользователю просто рыба отправляется. И все. Уведомление что получили, а админу уже форма. То есть админ должен получить форму а пользователю ответ что все хорошо.
Можно не редирект делать, а просто форму или сообщение что все ок. Но Я что то вообще заглох. Даже понять не могу кому дольше отправляется, пользователю или админу |
Мне кажется через базу данных не получится. Плюс ещё надо будет какой то признак ставить что отправилось или удалять вообще.
А можно как нибудь асинхронно запустить. Пользователю показать страницу что все ок. А дальше все просто само отрабатывает. Результат успеха не важен. Пользователь заполнил форму, ему сразу же страница типа все ок. А дальше идёт уже отправка. Не важен в общем успешный результат или нет |
Если не ок то пользователь вообще ничего не видет. А так пока для личного спокойствия, сразу показать пользователю страницу редиректа и не ждать ответа от сервера. Так можно сделать?
|
Ну попробуй после отправки не ждать ответа, а просто через полсекунды делать редирект.
|
Часовой пояс GMT +3, время: 18:20. |
|