|
Супер Долгое выполнение скрипта
Всем привет ребята. Скрипт
(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, время: 12:48. |
|