Javascript 如何使用AJAX向php提交隐藏值

Javascript 如何使用AJAX向php提交隐藏值,javascript,php,ajax,Javascript,Php,Ajax,我试图将一些值从html表单发送到php页面。 在表单中,我有一些隐藏的值,还有一个文本字段,它的值必须传递给php页面 index.php: <?php if ($login->isUserLoggedIn() == true){ ?> <div class="panel panel-default"> <div class="panel-heading"><h4&g

我试图将一些值从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{
      }?>

邀请朋友
输入电子邮件地址

friend-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>');                
            }
        });
    });
});
$(函数(){
$('form')。关于('submit',函数(e){
e、 预防默认值();
$.ajax({
键入:“get”,
url:'invite friend.php',
数据:$('form')。序列化(),
成功:函数(){
$(“.mail message”).html(“成功!表示成功或积极的行动。”);
}
});
});
});

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

您忘了给隐藏字段一个id:

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

…将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>');
          }
       });
    });
});
$(函数(){
$(“#btn提交”)。在('click',函数(e){
e、 预防默认值();
$.ajax({
键入:“get”,
url:'invite friend.php',
数据:$('form')。序列化(),
成功:函数(){
$(“.mail message”).html(“成功!表示成功或积极的行动。”);
}
});
});
});

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

伙计,你只是让代码变得复杂。。。您正在执行表单提交+ajax提交。我认为您出了问题。 试试这些: 从表单标记中删除action=“friend invite.php”,然后重试。如果这样做没有帮助,请使您的按钮输入类型为button或使用button标记。试试所有这些,应该会有用的。 如果所有这些都不起作用,请为表单提供id和名称,并使用以下方式提交:

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

试试所有这些

它应该会起作用。jQuery
serialize()
包括所有已启用的
input
元素和已定义的
name
。将您的ajax函数放在index.php中,并用标记括起来。“我想通过ajax完成”是什么意思?您已经在使用
$.ajax
。确切的问题是什么?@FelisCatus是的,但我没有得到任何回应。你能分享
$('form')的结果吗。serialize()
?类似于
console.log($('form').serialize())
的东西会很有帮助。您还可以检查浏览器的开发工具,将AJAX请求与普通请求进行比较。在这种情况下,不需要提供ID。其次!而且Serialize确实包含所有启用的具有name属性的输入元素。还有别的事情there@mithun你试过了吗?博洛吉