Поэтому я пытаюсь настроить простую форму обратной связи в Angular, которая будет отправлять электронную почту с помощью php на серверной части. Проблема в том, что я продолжаю получать следующую ошибку:
POST https://localhost/mailer/contact-form.php 405 (Method Not Allowed)
405 Method Not Allowed
The method POST is not allowed for this resource.
You cannot POST a file
я считать это как-то связано с CORS, но не знаю, связано ли оно с HTTPS, так как мы работаем на https: // локальный для развития.
Вот что я считаю важной частью контроллера:
testControllers.controller('FeedbackCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.feedback_errors = "";
$scope.hasError = false;
$scope.resultMessage;
$scope.formData = {};
$scope.submitButtonDisabled = false;
$scope.submitted = false; //used so that form errors are shown only after the form has been submitted
var param = function(data) {
var returnString = '';
for (var d in data){
if (data.hasOwnProperty(d))
returnString += d + '=' + data[d] + '&';
}
// Remove last ampersand and return
return returnString.slice( 0, returnString.length - 1 );
};
$scope.submit = function(feedbackForm) {
$scope.submitted = true;
$scope.submitButtonDisabled = true;
if (feedbackForm.$valid) {
$http({
method : 'POST',
url : 'mailer/contact-form.php',
data : param($scope.formData),
headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function(data){
console.log(data);
if (data.success) {
$scope.submitButtonDisabled = true;
$scope.resultMessage = data.message;
} else {
$scope.submitButtonDisabled = false;
$scope.resultMessage = data.message;
}
});
} else {
$scope.submitButtonDisabled = false;
}
}
}]);
а вот и php:
<?php
header('Access-Control-Allow-Origin: https://localhost');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
$errors = array();
$data = array();
if (empty($_POST['comments']))
$errors['comments'] = 'Feedback is required.';
if ( ! empty($errors)) {
$data['success'] = false;
$data['errors'] = $errors;
$data['messageError'] = 'Please check the fields in red';
} else {
$data['success'] = true;
$data['messageSuccess'] = 'Thanks for providing valuable feedback to the VIVA team.';
$email_to = "[email protected]";
$email_subject = "Feedback from VIVA webapp";
$name = $_POST['firstname'] . ' ' . $_POST['lastname'];
$email_from = $_POST['email'];
$message = $_POST['comments']; // required
$email_message = "Form details below.nn";
$email_message .= "Name: ".$name."n";
$email_message .= "Email: ".$email_from."n";
$email_message .= "Message: ".$message."n";
$headers = 'From: '.$email_from."rn".
'Reply-To: '.$email_from."rn" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
}
// return all our data to an AJAX call
echo json_encode($data);
?>
Я перепробовал так много разных комбинаций для заголовка php-файла, и мне интересно одно: я что-то упустил во внешнем интерфейсе? Буду очень признателен за любую помощь, так как я часами бьюсь головой о стену.
С уважением,
Julie
РЕДАКТИРОВАТЬ:
Итак, я создал простую форму, используя Angular, и запускаю ее на одном из моих собственных серверов, и она отлично работает.
Вот заголовки ответа от того, который работает, и от того, который не работает:
НЕ РАБОТАЕТ
General:
Remote Address:xx.xx.xx.xx:yyy
Request URL:https://xx.xx.xx.xx/form_test/processForm.php
Request Method:POST
Status Code:405 Not Allowed
Response Headers
Connection:keep-alive
Content-Length:574
Content-Type:text/html
Date:Mon, 06 Apr 2015 18:44:20 GMT
Server:nginx/1.6.2
РАБОТАЕТ
General:
Remote Address:xx.xx.xx.xx:yyy
Request URL:http://juliemarie.me/form_test/processForm.php
Request Method:POST
Status Code:200 OK
Response Headers
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Type:text/html
Date:Mon, 06 Apr 2015 18:37:19 GMT
Keep-Alive:timeout=15, max=100
Server:Apache
Transfer-Encoding:chunked
Кажется, что к файлу php даже нет доступа. Это возможно?
Задача ещё не решена.
Других решений пока нет …