Opencart + SweetAlert + Ajax. Почему я не могу поймать POST-запрос?

Я попытался создать форму SweetAlert с 3 входами (имя, адрес электронной почты, текст). Эта форма после отправки должна отправить данные формы на адрес электронной почты администратора. Сделал и все работает! Но я уверен, что мой код контроллера недействителен.

CMS: OpenCart 2.3 + SweetAlert 2.

Вот форма SweetAlert + запрос Ajax:

<script type = "text/javascript">
  window.onload = function () {
    var a = document.getElementById('director');
    a.onclick = function() {
        Swal({
          type: 'warning',
          title: 'Your message',
          html:
            '<input name = "name" id = "swal-input1" class = "swal2-input" placeholder = "Your name">' +
            '<input name = "email" id = "swal-input2" class = "swal2-input" placeholder = "Email">' +
            '<textarea name = "text" id = "swal-textarea1" class = "swal2-textarea" placeholder = "Enter your text..." style = "display: flex;"></textarea>',          
          showCancelButton: true,
          confirmButtonColor: '#ff5908',
          cancelButtonColor: '#666',
          confirmButtonText: 'Send',
          cancelButtonText: 'Cancel',
          preConfirm: function () {
            return new Promise(function (resolve) {
              resolve([
                $('#swal-input1').val(),
                $('#swal-input2').val(),
                $('#swal-textarea1').val()
              ])
            })
          },                    
        }).then(function (result) {
        	if (result.value) { 
		        var result = {};
		        result.name = $('#swal-input1').val();
		        result.email = $('#swal-input2').val(); 
		        result.text = $('#swal-textarea1').val(); 
		        var data = JSON.stringify(result);
	          	$.ajax({
	              url:"index.php?route=common/message/index",
	              type: "post",
                  data: data,                
                  dataType: "json",
	              success: function() {Swal({type: 'success', text: 'Message sent'});},
	              error: function(xhr,status,error){
	              console.info(status);
	              console.info(error);
	              }
	            })
        	}
        })

        return false;
    }
}
</script>

После этого ajax-запрос отправляется контроллеру «Сообщение» в метод «индексирования».

<?php
class ControllerCommonMessage extends Controller {

		public function index() {

		$request_body = file_get_contents('php://input');
		$data = json_decode($request_body);

		$username = $data->name;
		$email = $data->email;
		$msg = $data->text;
  	    $subject = 'Test email from: '.$email;

		$mail = new Mail();

		$mail->protocol = $this->config->get('config_mail_protocol');
		$mail->parameter = $this->config->get('config_mail_parameter');
		$mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
		$mail->smtp_username = $this->config->get('config_mail_smtp_username');
		$mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
		$mail->smtp_port = $this->config->get('config_mail_smtp_port');
		$mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');

		$mail->setTo('[email protected]');
		$mail->setFrom($this->config->get('config_email'));
		$mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'));
		$mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
		$mail->setHtml($msg);
		$mail->send();

    }			
}

Итак, форма работает, сообщения отправлены успешно. Но этот фрагмент кода мне не нравится:

$request_body = file_get_contents('php://input');
$data = json_decode($request_body);

Я тоже пробовал писать вот так:

if (isset($this->request->post['data'])) {
    $result = $this->request->post['data'];
    var_dump($result);
} else {
    echo 'empty';
}

Но ничего не работает. "результат" пуст. Что я делаю не так?

проверьте эту ссылку: stackoverflow.com/questions/10955017/…

hardik solanki 15.12.2018 11:23

Отлично! Спасибо большое! Я изменил строку: data: data на: data: {data: result} и удалил var data = JSON.stringify (result); И это работает! Большое тебе спасибо!

Roman Ignatev 15.12.2018 13:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
172
0

Другие вопросы по теме