无法让{{success message}}出现在Angular中

时间:2015-11-04 02:29:30

标签: javascript php angularjs twitter-bootstrap-3

我正在尝试复制此表单http://sunzhen.blogspot.com/2014/08/angularjs-contact-form-with-bootstrap.html,并且能够收到要发送的电子邮件,但我没有从contact-form.php文件中获取错误和成功消息。我不得不改变文件结构以使其适合我的网站,但这不应该影响任何事情。我发现使用Angular 1.2.16就像他们正在使用的那样,我得到了成功的消息但是当使用最新版本的Angular时我没有。任何人都可以告诉Angular的新版本中是否有更改会导致此行为吗? 这是代码http://plnkr.co/edit/Skj5r6WFfDQajkPuyzxT

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once 'phpmailer/PHPMailerAutoload.php';

if (isset($_POST['inputName']) && isset($_POST['inputEmail']) && isset($_POST['inputSubject']) && isset($_POST['inputMessage'])) {

    //check if any of the inputs are empty
    if (empty($_POST['inputName']) || empty($_POST['inputEmail']) || empty($_POST['inputSubject']) || empty($_POST['inputMessage'])) {
        $data = array('success' => false, 'message' => 'Please fill out the form completely.');
        echo json_encode($data);
        exit;
    }

    //create an instance of PHPMailer
    $mail = new PHPMailer();

    $mail->From = $_POST['inputEmail'];
    $mail->FromName = $_POST['inputName'];
    $mail->AddAddress('jfoutch23@gmail.com'); //recipient 
    $mail->Subject = $_POST['inputSubject'];
    $mail->Body = "Name: " . $_POST['inputName'] . "\r\n\r\nMessage: " . stripslashes($_POST['inputMessage']);

    if (isset($_POST['ref'])) {
        $mail->Body .= "\r\n\r\nRef: " . $_POST['ref'];
    }

    if(!$mail->send()) {
        $data = array('success' => false, 'message' => 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo);
        echo json_encode($data);
        exit;
    }

    $data = array('success' => true, 'message' => 'Thanks! We have received your message.');
    echo json_encode($data);

} else {

    $data = array('success' => false, 'message' => 'Please fill out the form 

completely.');
        echo json_encode($data);

    }        

controller.js

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; //used so that form errors are shown only after the form has been submitted
$scope.submit = function(contactform) {
    $scope.submitted = true;
    $scope.submitButtonDisabled = true;
    if (contactform.$valid) {
        $http({
            method  : 'POST',
            url     : 'contact-form.php',
            data    : $.param($scope.formData),  //param method from jQuery
            headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  //set the headers so angular passing info as form data (not request payload)
        }).success(function(data){
            console.log(data);
            if (data.success) { //success comes from the return json object
                $scope.submitButtonDisabled = true;
                $scope.resultMessage = data.message;
                $scope.result='bg-success';
            } else {
                $scope.submitButtonDisabled = false;
                $scope.resultMessage = data.message;
                $scope.result='bg-danger';
            }
        });
    } else {
        $scope.submitButtonDisabled = false;
        $scope.resultMessage = 'Failed :( Please fill out all the fields.';
        $scope.result='bg-danger';


    }
    }
});

HTML

<!DOCTYPE html>
<html>

<head>
  <title>AngularJS Contact Form with Bootstrap and PHPMailer</title>
  <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
  <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css" />
  <link rel="stylesheet" href="style.css" />
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
  <script src="app.js"></script>
  <script src="controllers.js"></script>
</head>

<body ng-app="contactApp">
  <div class="vertical-middle">
    <div class="container">
      <div class="panel panel-default">
        <div class="panel-heading">
          <h2 class="panel-title">Contact Form</h2>
        </div>
        <div ng-controller="ContactController" class="panel-body">
          <form ng-submit="submit(contactform)" name="contactform" method="post" action="" class="form-horizontal" role="form">
            <div class="form-group" ng-class="{ 'has-error': contactform.inputName.$invalid && submitted }">
              <label for="inputName" class="col-lg-2 control-label">Name</label>
              <div class="col-lg-10">
                <input ng-model="formData.inputName" type="text" class="form-control" id="inputName" name="inputName" placeholder="Your Name" required="" />
              </div>
            </div>
            <div class="form-group" ng-class="{ 'has-error': contactform.inputEmail.$invalid && submitted }">
              <label for="inputEmail" class="col-lg-2 control-label">Email</label>
              <div class="col-lg-10">
                <input ng-model="formData.inputEmail" type="email" class="form-control" id="inputEmail" name="inputEmail" placeholder="Your Email" required="" />
              </div>
            </div>
            <div class="form-group" ng-class="{ 'has-error': contactform.inputSubject.$invalid && submitted }">
              <label for="inputSubject" class="col-lg-2 control-label">Subject</label>
              <div class="col-lg-10">
                <input ng-model="formData.inputSubject" type="text" class="form-control" id="inputSubject" name="inputSubject" placeholder="Subject Message" required="" />
              </div>
            </div>
            <div class="form-group" ng-class="{ 'has-error': contactform.inputMessage.$invalid && submitted }">
              <label for="inputMessage" class="col-lg-2 control-label">Message</label>
              <div class="col-lg-10">
                <textarea ng-model="formData.inputMessage" class="form-control" rows="4" id="inputMessage" name="inputMessage" placeholder="Your message..." required=""></textarea>
              </div>
            </div>
            <div class="form-group">
              <div class="col-lg-offset-2 col-lg-10">
                <button type="submit" class="btn btn-default" ng-disabled="submitButtonDisabled">
                  Send Message
                </button>
              </div>
            </div>
          </form>
          <p ng-class="result" style="padding: 15px; margin: 0;">{{ resultMessage }}</p>
        </div>
      </div>
    </div>
  </div>
</body>

</html>

2 个答案:

答案 0 :(得分:0)

实际上,您从回调中得到的是response,包括标题详细信息。试试这个。

        .........  
        }).success(function(response){
            console.log(response);
            if (response.data.success) { 
                $scope.submitButtonDisabled = true;
                $scope.resultMessage = response.data.message;
                $scope.result='bg-success';
            } else {
                $scope.submitButtonDisabled = false;
                $scope.resultMessage = response.data.message;
                $scope.result='bg-danger';
            }
         ..........

答案 1 :(得分:0)

您需要更正您的电子邮件发送代码到PHP。我认为它有一些错误。如果你修复了,你会得到一个结果。你的修正看起来像这样。我添加了一个错误处理程序方法。

$http({
        method: 'POST',
        url: 'contact-form.php',
        data: $.param($scope.formData), //param method from jQuery
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        } //set the headers so angular passing info as form data (not request payload)
      }).success(function(data) {
        console.log(data);
        if (data.success) { //success comes from the return json object
          $scope.submitButtonDisabled = true;
          $scope.resultMessage = data.data.message;
          $scope.result = 'bg-success';
        } else {
          $scope.submitButtonDisabled = false;
          $scope.resultMessage = data.data.message;
          $scope.result = 'bg-danger';
        }
      }).error(function(error, status) {
        $scope.submitButtonDisabled = false;
        $scope.resultMessage = 'Failed :( Please fill out all the fields.';
        $scope.result = 'bg-danger';
      });