Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.02.2023, 12:48
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Супер Долгое выполнение скрипта
Всем привет ребята. Скрипт

(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

Последний раз редактировалось BorisJe, 18.02.2023 в 12:57.
Ответить с цитированием
  #2 (permalink)  
Старый 18.02.2023, 13:57
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Ну так "размораживай", когда придет ответ от сервера.
Пока не ответил, показывай какой нибудь значок загрузки, что бы пользовал спокойней был.
Ответить с цитированием
  #3 (permalink)  
Старый 18.02.2023, 15:05
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Сообщение от voraa Посмотреть сообщение
Ну так "размораживай", когда придет ответ от сервера.
Пока не ответил, показывай какой нибудь значок загрузки, что бы пользовал спокойней был.
Да поставил уже, Он крутится и крутится. Долго
Может конечно не в скрипте дело. Cms Joomla
Ответить с цитированием
  #4 (permalink)  
Старый 18.02.2023, 15:13
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

А Мне бы хотелось, чтобы пользователь увидел типа ну все ок, страницу редиректа. А потом уже все там делалось
Ответить с цитированием
  #5 (permalink)  
Старый 18.02.2023, 17:46
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Не получится. Нельзя послать запрос с одной страницы, а ответ получить на другой.
Тогда сначала делай редирект, и с той страницы посылай запрос.
Данные для запроса можно через localStorage передать.
Ответить с цитированием
  #6 (permalink)  
Старый 18.02.2023, 17:53
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Такие операции по-хорошему асинхронно выполнять нужно.
Самое простое - складируйте письма, которые нужно отправить в табличку в БД и по крону отправляйте небольшие порции раз в минуту.
Для пользователя такие запросы к серверу моментальными должны стать.
Ответить с цитированием
  #7 (permalink)  
Старый 19.02.2023, 03:09
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Ну смотрите пользователю просто рыба отправляется. И все. Уведомление что получили, а админу уже форма. То есть админ должен получить форму а пользователю ответ что все хорошо.
Можно не редирект делать, а просто форму или сообщение что все ок.
Но Я что то вообще заглох. Даже понять не могу кому дольше отправляется, пользователю или админу
Ответить с цитированием
  #8 (permalink)  
Старый 19.02.2023, 06:46
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Мне кажется через базу данных не получится. Плюс ещё надо будет какой то признак ставить что отправилось или удалять вообще.
А можно как нибудь асинхронно запустить. Пользователю показать страницу что все ок. А дальше все просто само отрабатывает. Результат успеха не важен.
Пользователь заполнил форму, ему сразу же страница типа все ок. А дальше идёт уже отправка. Не важен в общем успешный результат или нет
Ответить с цитированием
  #9 (permalink)  
Старый 19.02.2023, 08:50
Аспирант
Отправить личное сообщение для BorisJe Посмотреть профиль Найти все сообщения от BorisJe
 
Регистрация: 03.12.2021
Сообщений: 66

Если не ок то пользователь вообще ничего не видет. А так пока для личного спокойствия, сразу показать пользователю страницу редиректа и не ждать ответа от сервера. Так можно сделать?
Ответить с цитированием
  #10 (permalink)  
Старый 19.02.2023, 10:34
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Ну попробуй после отправки не ждать ответа, а просто через полсекунды делать редирект.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фоновое выполнение скрипта AleksSergSB Общие вопросы Javascript 2 19.01.2019 13:54
Выполнение скрипта если есть html элемент Янковиц Элементы интерфейса 2 24.10.2017 21:47
Можно ли отключить выполнение скрипта в IE ? dimba jQuery 2 20.11.2014 07:17
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 10:56
как прекратить выполнение скрипта ? kefi Общие вопросы Javascript 3 31.03.2009 19:05