2016-05-05 3 views
0

Проект, над которым я работаю, требует от меня создания почтовой формы внутри 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(); 
} 
+1

Вы видите, что 'переменная html' вы получаете в функции 'success'? Это ваши «данные». Попробуйте выполнить 'console.log (html)' вместо 'console.log (data)'. –

+0

@MikeC Убей меня вторым xD – icecub

ответ

1

Ваши переменные должны быть одинаковыми. Если вы используете success: function (html), то ваша консоль.Журнал должен быть console.log(html) еще, если вы решите использовать data то изменить html к data

1

проверка на вкладке Сеть на хром Дев инструментов, там вы можете увидеть ответ сервера, также этот shoulbe легко, как

function send(datastr) { 
    $.ajax({ 
    type: "POST", 
    url: "formsend.php", 
    data: datastr, 
    cache: false, 
    success: function(html) { 
     console.log(html); 
    } 
    }); 
} 
+0

На вкладке в сети ничего не говорится о файле php, к сожалению. – Zachiel

1

ЯШ:

function send(datastr) { 
    $.ajax({ 
    type: "POST", 
    url: "formsend.php", 
    datatype : 'json', 
    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(html); 
    } 
    }); 
} 

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 json_encode(array('status' => 'success','message'=>"Message Sent OK")); 
} 
catch (Exception $e) { 
    echo json_encode(array('status' => 'failed','message'=>$e->getMessage())); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^