使用两个按钮和 ajax 提交表单

Sumbit form with two buttons and ajax

我有一个用 ajax 制作的表单,在这个表单中有 2 个提交,两者都具有与发送电子邮件相同的功能,但取决于用户是否使用其中一个,电子邮件必须表明这一点选择。

我尝试使用 isset 函数来查看提交两个按钮中的哪一个,但是当我收到此参数时它是空的。

HTML形式

<form id="form-landing" data-ajax="<?php echo admin_url('admin-ajax.php?action=contactlanding'); ?>">

    <?php while (have_posts()) : the_post();
        the_content();
    endwhile; ?>
    <?php wp_nonce_field(); ?>

    <div id="step1">
        <div class="group-form">
            <p>1.- question 1</p>
            <div>
                <label for="afrontarsi">Yes</label><input type="radio" name="afrontar" value="Si" id="afrontarsi">
                <label for="afrontarno">No</label><input type="radio" name="afrontar" value="No" id="afrontarno">
            </div>

        </div>

        <div class="group-form">
            <p>2. - Question 2</p>
            <div>
                <input type="text" name="importe" id="importe"> €
            </div>
        </div>


        <button class="send-button" name="1button" href="">Yes</button>
        <button class="send-button" name="2button" href="">No</button>


</form>

jQuery

if(is_page_template('template-landing.php')): ?>
$('#form-landing').submit(function(e){

  e.preventDefault();
    var form = $(this).addClass('loading');
    var alert = form.find('.alert').removeClass('alert-danger alert-success').html('');
        $.ajax({
        url:form.data('ajax'),
        type:'POST',
        data:new FormData(this),
        processData:false,
        contentType:false,
    }).done(function(data){
        form[0].reset();
        form.find('.btn').prop('disabled',true);
        alert.addClass('alert-success').html(data);
    }).fail(function(error){
        alert.addClass('alert-danger').html(error.responseText);

    }).always(function(){
        form.removeClass('loading');

  });
});
<?php endif;
?>

PHP函数

function contactlanding(){

    if(check_ajax_referer()){

        $afrontar = sanitize_text_field($_POST['afrontar']);
        $importe = sanitize_text_field($_POST['importe']);
        if (isset($_POST['1button'])) {$button="First";} else{$button="Second";}        


        $web = parse_url(home_url(),PHP_URL_HOST);
        $message = '<p><strong>Afrontar:</strong> '.$afrontar.'</p>';
        $message .= '<p><strong>Importe:</strong> '.$importe.'</p>';
        $message .= '<p><strong>Button:</strong> '.$button.'</p>';


        $headers  = 'MIME-Version:1.0'."\r\n";
        $headers .= 'Content-type:text/html;charset=utf-8'."\r\n";
        $headers .= 'From:noreplay@'.$web."\r\n";
        $headers .= 'Reply-To:'.$email."\r\n";
        $send = mail(get_bloginfo('admin_email'),'Mensaje enviado desde '.$web,$message,$headers);
        if($send==true){
            echo 'Gracias, tu mensaje se ha enviado correctamente.';exit;
        }
    }
    http_response_code(400);echo 'Algo salió mal, por favor intenta más tarde.';exit;
}

您可以将动作存储在隐藏的输入中。 您的服务器将接收数据,您将能够读取它。接下来,用一个很简单的方法来给大家指路:

$('.send-button').on('click', function (){  $(this).closest('form').find('[name="action"]').val($(this).data('submit')) 
})

$('form').on('submit', function(evt) {
  // form content :
  console.log($(this).serialize());
  // prevent form submission for the demo
  evt.preventDefault();
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <input type="text" name="firstname" value="Johon" /> 
  <input type="hidden" name="action" value="" /> 
  <button class="send-button" name="1button" href="" data-submit="yes">Yes</button>
  <button class="send-button" name="2button" href="" data-submit="no">No</button>
</form>