我正在處理的一個項目需要我在Joomla內建立一個郵件表單。如何顯示由ajax調用運行的PHP文件的回顯?
有人在SO的聊天中建議我使用PHPmailer - 但我注意到它包含在joomla包中,我不想再次加載它,所以我閱讀了一些關於jFactory的文檔,然後我就這樣去了。
我想用一些javascript對輸入字段進行prsonalize,所以我還使用JS(具體來說,您可以在下面閱讀ajax調用)以命令服務器向我發送郵件。如果將郵件字段傳遞給郵件程序部分(如果它位於表單所在的同一個php文件中),我不知道是否可以/更容易將郵件字段傳遞給郵件程序部分,因此我創建了一個html表單,它調用JS和一個單獨的php發件人:
- html頁面包含窗體和一個空的div。
- jQuery腳本在運行時修改表單(主要是根據其他選項更改下拉選項),並在單擊發送按鈕時進行變量驗證,以便發送郵件(通過ajax調用外部php文件)或輸出錯誤消息(即「需要郵件地址」)。
- php文件實際上使用jFactory發送郵件。
整個事情能正常工作,但我還需要一些更多的測試和我不能從任何地方訪問php的回聲,包括鍍鉻的檢查。
我讀到echo會自動保存到javascript中的「data」變量,但是這個變量不存在,如果我創建它(可能在錯誤的地方),它不會被填充。我嘗試過(在PHP腳本內)try/catch和if($ mail-> Send())方法來生成回顯消息,但由於我從來沒有在瀏覽器中運行php頁面,我不知道是否有任何工作。
如何獲取回顯消息回我的JS,所以我可以使用console.log()來讀取它? 我不能在Chrome上安裝擴展程序,或在不久的將來使用任何其他瀏覽器。但如果這是我的唯一選擇,我想知道它。
爲了僅顯示php調用部分,我將省略掉頭文件,_JEXEC函數和大部分文件。
JS:
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'變量你得到在「成功」函數中?這是你的'數據'。嘗試做'console.log(html)'而不是'console.log(data)'。 –
@MikeC毆打我一秒xD – icecub