如何使用AJAX

时间:2015-09-30 05:58:23

标签: javascript php ajax

我正在尝试从html表单发送一些值到php页面。 在这里我有一些隐藏的值和一个文本字段,其值必须传递给php页面。

的index.php:

<?php
      if ($login->isUserLoggedIn() == true){    
      ?>
            <div class="panel panel-default">
            <div class="panel-heading"><h4>Invite friend</h4></div>
            <div class="panel-body">                        
            <form action="friend-invite.php" method="get">              
                <div class="col-md-4 col-lg-4">
                  <label class="control-label" for="friend">Enter email address</label>              
                  <input type="email" class="form-control" name="friendemail" id="friendemail" placeholder="sam@uncle.com" required><br>                                
                  <?php 
                  echo '<input type="hidden" name="invitename" value="'.$_SESSION["user_name"].'">' ;                 
                  echo '<input type="hidden" name="invite-url" value="'.$_SERVER['REQUEST_URI'].'">';
                  echo '<input type="hidden" class="invite-product" name="invite-product-name">';
                  ?>
                  <input type="submit" name="submit" value="Invite" class="btn btn-primary">
                </div>            
            </form>
            <div class="mail-message"></div>
            </div>
            </div>
      <?php 
      }else{
      }?>

朋友-invite.php:

<?php
    include('_header.php');
    $user_email = $_GET['friendemail'];      
    $invited_by = $_GET['invitename'];  
    $invite_link = $_GET['invite-url'];    
    $product_name = $_GET['invite-product-name'];    
    if (isset($user_email, $invited_by, $invite_link, $product_name)){
        sendInvitation($user_email,$invited_by,$invite_link,$product_name);        
    } else {  
        echo "Are you trying to do something nasty??";
    }

    function sendInvitation($user_email,$invited_by,$invite_link,$product_name)
    {
        $mail = new PHPMailer;
        if (EMAIL_USE_SMTP) {
            $mail->IsSMTP();
            $mail->SMTPAuth = EMAIL_SMTP_AUTH;
            if (defined(EMAIL_SMTP_ENCRYPTION)) {
                $mail->SMTPSecure = EMAIL_SMTP_ENCRYPTION;
            }
            $mail->Host = EMAIL_SMTP_HOST;
            $mail->Username = EMAIL_SMTP_USERNAME;
            $mail->Password = EMAIL_SMTP_PASSWORD;
            $mail->Port = EMAIL_SMTP_PORT;
            $mail->IsHTML(true);
        } else {
            $mail->IsMail();
        }
        $mail->From = EMAIL_VERIFICATION_FROM;
        $mail->FromName = $invited_by;
        $mail->AddAddress($user_email);
        $mail->Subject = SHOP_INVITE;
        $link = $invite_link;
        $mail->Body = $invited_by." ".FRIEND_INVITE_PRODUCT."<a href='".$link."'>".$product_name."</a>";        
        if(!$mail->Send()) {
            $this->errors[] = MESSAGE_VERIFICATION_MAIL_NOT_SENT . $mail->ErrorInfo;
            return false;            
        } else {        
            return true;            
        }
    }
?>

AJAX功能:

$(function () {
        $('form').on('submit', function (e) {
          e.preventDefault();
          $.ajax({
            type: 'get',
            url: 'invite-friend.php',
            data: $('form').serialize(),
            success: function () {
                $(".mail-message").html('<div class="alert alert-success"><strong>Success!</strong> Indicates a successful or positive action.</div>');                
            }
        });
    });
});

friend-invite.php页面获取已传递给它的值并检查是否已设置值,如果已设置,则它将使用参数调用php函数sendInvitation()。现在所有这些事情都发生得很好。但我想通过AJAX来做。我怎么能这样做。

3 个答案:

答案 0 :(得分:1)

你忘了给隐藏的字段一个id:

 echo '<input type="hidden" name="invitename" id="invitename" value="'.$_SESSION["user_name"].'">' ;

...

答案 1 :(得分:1)

将index.php更改为:

<?php
  if ($login->isUserLoggedIn() == true){    
  ?>
        <div class="panel panel-default">
        <div class="panel-heading"><h4>Invite friend</h4></div>
        <div class="panel-body">                        
        <form action="">              
            <div class="col-md-4 col-lg-4">
              <label class="control-label" for="friend">Enter email address</label>              
              <input type="email" class="form-control" name="friendemail" id="friendemail" placeholder="sam@uncle.com" required><br>                                
              <?php 
              echo '<input type="hidden" name="invitename" value="'.$_SESSION["user_name"].'">' ;                 
              echo '<input type="hidden" name="invite-url" value="'.$_SERVER['REQUEST_URI'].'">';
              echo '<input type="hidden" class="invite-product" name="invite-product-name">';
              ?>
              <input type="button" id="btn-submit" name="submit" value="Invite" class="btn btn-primary" />
            </div>            
        </form>
        <div class="mail-message"></div>
        </div>
        </div>
  <?php 
  }else{
  }?>

将AJAX功能更改为:

$(function () {
    $('#btn-submit').on('click', function (e) {
      e.preventDefault();
      $.ajax({
          type: 'get',
          url: 'invite-friend.php',
          data: $('form').serialize(),
          success: function () {
              $(".mail-message").html('<div class="alert alert-success"><strong>Success!</strong> Indicates a successful or positive action.</div>');
          }
       });
    });
});

如果我们使用AJAX,我们不需要表单中的提交按钮。

答案 2 :(得分:1)

老兄,你只是让你的代码变得复杂......你正在做表单提交+ ajax提交。我认为你出错了。 试试这些: 从表单标记中删除 action =“friend-invite.php”,然后尝试。如果这比按钮输入类型按钮或使用按钮标签没有帮助。试试这一切应该有效。 如果所有这些都不起作用,请为您的表单提供ID和名称,并使用提交为:

$(function() {
            $("#form_id").on("submit", function(event) {

尝试所有这些