Проект, над которым я работаю, требует от меня создания почтовой формы внутри Joomla.Как отобразить эхо файла PHP, который выполняется при вызове ajax?
Некоторые люди в чате SO предложили мне использовать PHPmailer, но я заметил, что он включен в пакет joomla, и я действительно не хочу его загружать во второй раз, поэтому я прочитал некоторую документацию о jFactory, и я пошел так ,
Я хотел прорекламировать поля ввода с помощью некоторого javascript, поэтому я также использовал JS (в частности, вызов ajax, который вы можете прочитать ниже), чтобы заставить сервер отправлять мне почту. Я понятия не имею, возможно ли/проще передать почтовые поля в почтовую часть, если она находится в том же файле php, что форма включена, поэтому я создал html-форму, которая вызывает JS и отдельный php с фактическим отправитель:
- html-страница содержит форму и пустой div.
- сценарий jQuery изменяет форму в перспективе (в основном меняя варианты раскрывающегося списка на основе других вариантов) и выполняет ли проверка переменных при нажатии кнопки «Отправить», чтобы либо отправить почту (через вызов ajax на внешний php-файл) или выводить сообщение об ошибке (т. е. требуется «Почтовый адрес»).
- php-файл фактически отправляет почту с помощью jFactory.
Все это прекрасно работает, но я собираюсь нужно больше испытывать и я не могу получить доступ к PHP эха из любой точки мира, в том числе инспектора Хрома.
Я прочитал, что эхо автоматически сохраняется в переменной «data» в javascript, но эта переменная не существует, и если я ее создаю (возможно, в неправильном месте), она не заполняется.
Я попытался (внутри php-скрипта), как try/catch, так и if ($ mail-> Send()) подходит для генерации эхо-сообщений, но поскольку я никогда не запускаю php-страницу в браузере, Я понятия не имею, работает ли он.
Как получить эхо-сообщения обратно в мой JS, чтобы я мог использовать console.log() для его чтения? Я не могу устанавливать расширения в Chrome или использовать любой другой браузер в ближайшем будущем. Но если это единственный вариант, который я имею, я хочу это знать.
Я буду оставлять заголовки, функцию _JEXEC и большую часть файлов, чтобы показывать только часть вызова php.
ЯШ:
function send(datastr) {
$.ajax({
type: "POST",
url: "formsend.php",
data: datastr,
cache: false,
success: function(html) {
$("#systemMessage").fadeIn("slow");
$("#systemMessage").html('<span>Message successfully sent.</span>');
$("#systemMessage").css("background-color", "#e1ffc0");
setTimeout($("#systemMessage").fadeOut("slow"), 2000);
console.log(data);
}
});
}
PHP:
try {
define('JPATH_BASE', "../");
define('DS', DIRECTORY_SEPARATOR);
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php');
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php');
require ('libraries/joomla/factory.php');
# require_once '../class.phpmailer.php';
$name=$_REQUEST['name'];
$subject=$_REQUEST['subject'];
$body=$_REQUEST['body'];
$from=$_REQUEST['from'];
$to = "[email protected]";;
# Invoke JMail Class
$mail = JFactory::getMailer();
# $mail->isSMTP; is not working
# Set sender array so that my name will show up neatly in your inbox
$sender = array($user, $name);
$mail->setSender($sender);
# Add a recipient
$mail->addRecipient($to);
$mail->ClearCCs();
$mail->ClearBCCs();
$mail->setSubject($subject);
$mail->setBody($body);
$mail->ClearAttachments();
$mail->ClearCustomHeaders();
# Send once you have set all of your options
$mail->Send();
echo "Message Sent OK\n";
}
catch (Exception $e) {
echo $e->getMessage();
}
Вы видите, что 'переменная html' вы получаете в функции 'success'? Это ваши «данные». Попробуйте выполнить 'console.log (html)' вместо 'console.log (data)'. –
@MikeC Убей меня вторым xD – icecub