Не удалось сделать запрос на $_POST["name"]
$http
, получив undefined для $_POST["name"]
в php и для всех других опубликованных данных. но в моей консоли правильно печатают все данные, может ли помочь мне, где я ошибся. Я посылаю данные при срабатывании события click, я новичок в угловом, пожалуйста, помогите мне решить эту проблему, благодаря ответам заранее.
angular.element(document.querySelector('#applyJob')).unbind('click').bind('click', function () { console.log($scope.userName+$scope.userEmail+$scope.userMobileNo+$scope.subject+$scope.userCoverLetter+$scope.attach); $http({ method: "POST", url: "mailer.php", data: { name : $scope.userName, mail : $scope.userEmail, no : $scope.userMobileNo, subject : $scope.subject, message : $scope.userCoverLetter, attach : $scope.attach }, headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} }); });
мой php
код выглядит ниже
require ('smtp_lib/phpmailer.php'); require ('smtp_lib/smtp.php'); $mail = new PHPMailer(); // create a new object $mail->IsSMTP(); // enable SMTP $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only $mail->SMTPAuth = true; // authentication enabled $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail $mail->Host = "smtp.gmail.com"; $mail->Port = 465; // or 587 $mail->IsHTML(true); $mail->Username = "xxx@gmail.com"; $mail->Password = "yyyyyy"; $mail->FromName = $_POST["name"]; $mail->Subject = $_POST["subject"]; $mail->AddAddress("zzz@gmail.com"); $mail->AddReplyTo($_POST["mail"]); $mail->Body = $_POST["message"].'<br>'.$_POST["no"]; $mail->AddAttachment($_POST["attach"]); $mail->Send();
если я открою php_error_log
я получаю эти ошибки
[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: name in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 16 [29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: subject in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 17 [29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: mail in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 20 [29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: message in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 [29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: name in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 [29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: mail in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 [29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: no in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21
Это известная проблема Angular с Php, с которой вы можете решить эту проблему;
var form = {name:"x",mail:"x",no:0,subject:"x",message:"x",attach:"x"}; var formData = new form(); formData.name = $scope.userName, formData.mail = $scope.userEmail, formData.no = $scope.userMobileNo, formData.subject = $scope.subject, formData.message = $scope.userCoverLetter, formData.attach = $scope.attach $http({ method: "POST", url: "mailer.php", data: formData });
В php вы берете это с file_get_contents("php://input")
;
$postdata = file_get_contents("php://input"); $formData = json_decode($postdata); echo $formData->name;
$post = json_decode(file_get_contents('php://input'), true);
Я добавил эту выше одну строку в mailer.php
, моя проблема решена. Спасибо за все ответы.
Сначала проверьте $scope.userName
если он определен в консоли перед отправкой запроса, и вы можете написать его следующим образом:
var data = { name : $scope.userName, mail : $scope.userEmail, no : $scope.userMobileNo, subject : $scope.subject, message : $scope.userCoverLetter, attach : $scope.attach } $http.post('mailer.php', { params: data }). success(function(data, status, headers, config) { // something }). error(function(data, status, headers, config) { // something else });
Добавьте директиву для установки в качестве сообщения формы для всех ваших запросов на отправку по почте. ваш php-код останется прежним
//Directive - change App with your app name App.factory("setAsFormPost", ['$rootScope', function($rootScope) { function transformRequest(data, getHeaders) { var headers = getHeaders(); headers[ "Content-type" ] = "application/x-www-form-urlencoded; charset=utf-8"; return($.param(data)); } return(transformRequest); }]); // you need to pass setAsFormPost to your controller like this App.controller('ControllerName', ['$scope','setAsFormPost', '$http', function($rootScope, $scope, messageHandler, settings, yiiBox, yiiHttp) { $http.post('mailer.php', {name : $scope.userName, mail : $scope.userEmail, no : $scope.userMobileNo, subject : $scope.subject, message : $scope.userCoverLetter, attach : $scope.attach}, {transformRequest: setAsFormPost}).success(function (result) { //something }).error(function (error) { //something }); }]);