Es tut mir leid, wenn dies vorherige Fragen wiederholt, aber ich konnte nicht eine Lösung finden, die mit meinem Problem zu arbeiten scheint & im neuen zu Angular.
Ich habe eine Angular-Form, die Daten mit PHP kommuniziert, um eine E-Mail zu senden, und mein Problem ist mit der JSON-Antwort von der PHP (wie die PHP teilt zurück, ob es innerhalb der JSON selbst, zusammen mit einer Nachricht). Ich kann nicht scheinen, um den Code zu erhalten, basierend auf dem "Erfolg" -Wert innerhalb der JSON, noch tatsächlich die "Nachricht.
Die JSON-Antwortdaten sieht so aus (wenn es aufgrund einer E-Mail fehlschlägt Ausgabe):
Also mein Winkel Code muss auf Basis von "Erfolg" wahr oder falsch, antworten, während auch die "Nachricht" anzuzeigen, die von AJAX in JSON übergeben wird
My Angular-Controller-Code.:
app.controller('ContactController', function ($scope, $http) {
$scope.result = 'hidden'
$scope.resultMessage;
$scope.formData; //formData is an object holding the name, email, subject, and message
$scope.submitButtonDisabled = false;
$scope.submitted = false;
$scope.submit = function(contactform) {
$scope.submitted = true;
$scope.submitButtonDisabled = true;
if (contactform.$valid) {
var request = $http({
method : 'POST',
url : 'php/contact.php',
data : $.param($scope.formData), //param method from jQuery
headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
});
if (request.success) {
console.log(request);
$scope.submitButtonDisabled = false;
$scope.result='bg-success';
$scope.resultMessage = request.message;
} else {
$scope.submitButtonDisabled = true;
$scope.resultMessage = request.message;
//$scope.resultMessage = "Opps!... something went wrong. Please Contact OpenHouse directly to let them know of this error.";
$scope.result='bg-danger';
};
//};
} else {
$scope.submitButtonDisabled = false;
$scope.resultMessage = 'Failed <img src="http://www.chaosm.net/blog/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley"> Please fill out all the fields.';
$scope.result='bg-danger';
}
}
});
Mein PHP-Code:
<?php
require_once ("class.phpmailer.php"); // Include phpmailer class
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
if (isset($_POST['inputFirstName']) && isset($_POST['inputLastName']) && isset($_POST['inputEmail']) && isset($_POST['inputPhone']) && isset($_POST['inputMessage'])) {
//check if any of the inputs are empty
if (empty($_POST['inputFirstName']) || empty($_POST['inputLastName']) || empty($_POST['inputEmail']) || empty($_POST['inputPhone']) || empty($_POST['inputMessage'])) {
$data = array('success' => false, 'message' => 'Please fill out the form completely.');
echo json_encode($data);
exit;
}
$message=
'First Name: '.$_POST['inputFirstName'].'<br />
Last Name: '.$_POST['inputLastName'].'<br />
Phone: '.$_POST['inputPhone'].'<br />
Email: '.$_POST['inputEmail'].'<br />
Comments: '.$_POST['inputMessage'].'
';
$mail = new PHPMailer(); // Instantiate the PHPMailer Class
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // SMTP authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled + REQUIRED for Gmail (either SSL or TLS)
$mail->Host = "smtp.gmail.com"; //Gmail SMTP Server to relay thru
$mail->Port = 465; // Port 465 as we're using SSL... or use Port 587 for TLS
$mail->IsHTML(true); // We're sending a HTML formatted message
$mail->Username = "[email protected]"; // Gmail account for authentication
$mail->Password = "*********"; // Gmail password for authentication
$mail->SetFrom("[email protected]"); // The email is being sent from this address
$mail->Subject = "Website Contact Form Enquiry"; // The subject line of the email
$mail->Body = ($message); // The actual email message to be sent
$mail->AddAddress("[email protected]"); // The email is being sent to this address
if(!$mail->send()) {
echo json_encode(['success' => false, 'message' => 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo]);
exit;
}
error_log("Data: ".$data['success']." Message: ".$data['message']);
echo json_encode(['success' => true, 'message' => 'Thanks! We have received your message.']);
} else {
echo json_encode(['success' => false, 'message' => 'Please fill out the form completely.']);
}
?>
Lesen Sie mehr über [$ http] (https://docs.angularjs.org/api/ng/service/$http) -Dienst. Das $ http gibt den Antworttext nicht zurück, es gibt eine Antwort mit dem Antwortobjekt zurück, die den Antworttext unter anderem Header, Status usw. enthält. –
Auch für angular, um Ihre Antwort von PHP automatisch auf ein Objekt zu analysieren und nicht eine Zeichenfolge von JSON, sollten Sie eine 'content-type: application/json'-Header mit Ihrer Antwort, –
@BlissSol auf Ron Dadon Antwort erweitern, da' $ http 'ist asynchron und die 'request' Variable gibt stattdessen eine Zusage zurück von 'if (request.success)' Sie wollen 'request.then (function (response) {if (response.data.success) {...}})' – Fissio