使用带有多个提交按钮的AJAX

时间:2017-04-13 07:34:09

标签: php jquery ajax form-submit

我有一个html表单,其中包含2个提交按钮。

这两个提交按钮连接到一个php文件,该文件根据提交运行语句。 php文件运行正常,虽然当我使用AJAX发送数据并防止重定向时,信息无法到达php文件,尽管我在测试时php语句正常工作。

有趣的是,当我使用只有一个提交且没有if/else的PHP时,信息到达php进行处理而没有重定向,所以问题可能在于两个提交,并且因为我的AJAX无法处理或区分提交。

我附上我的代码

HTML

<input type="submit" name="first_submit" value="Frist" /> 
<input type="submit" name="second_submit" value="Second" />

AJAX

<script>
     $(function () {
    $('#form').on('submit', function (e) {
        $.ajax({
            type: 'post',
            url: 'test.php',
            data: $(this).serialize(),
            success: function () {
                location.reload();
            } 
        });
        e.preventDefault();
    });
});
    </script>

PHP

if (isset($_POST['first_submit'])) {
             //do something

    } 
    elseif (isset($_POST['second_submit'])) {
               //do something
    }

    else {
    //do something
    }

?> 

2 个答案:

答案 0 :(得分:-1)

尝试使用此代码阻止默认操作

Jquery的

event.preventDefault()

以便不会触发事件的默认操作

答案 1 :(得分:-1)

您可以创建并使用一些会话变量来轻松实现。

例如$ _SESSION ['validate']。

按钮的HTML和PHP代码

<button type="submit" id="first_submit" style="<?php echo isset($_SESSION['validate'])?'display:none':'';?>">first submit</button>
<button type="submit" id="second_submit" style="<?php echo isset($_SESSION['validate'])?'':'display:none';?>">second submit</button>

jquery和ajax脚本

<script>
    $(document).ready(function(){

        $("#form").on('submit', function(e){
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'handler-file.php',
                data:  new FormData(this),
                dataType: "json",
                enctype: 'multipart/form-data',
                contentType: false,
                cache: false,
                processData:false,
                error:function(error){
                    //your required code or alert
                    alert(error.responseText);
                },
                success: function(response){
                    if(response.status=='1')
                    {
                        //your required code or alert
                        $('#first_submit').hide();
                        $('#second_submit').show();
                    }
                    else if(response.status=='2')
                    {
                        //your required code or alert
                        $('#first_submit').show();
                        $('#second_submit').hide();
                    }
                    else
                    {
                        //your required code or alert
                    }
                }
            });
        });

    });
    </script>

处理程序PHP文件

<?php
session_start();

$result['status']='0';
$result['error']='';

if(!isset($_SESSION['validate']))
{
    if(!isset($_FILES['file'])) 
    {
        $result['error'].='[Er-02 file missing!]';
    }
    else
    {
        //your other code
        $_SESSION['validate'] = true;
        $result['status']='1';
    }
}
else if($_SESSION['validate']==true)
{
    if(!isset($_FILES['file'])) 
    {
        $result['error'].='[Er-03 Validation file missing!]';
    }
    else
    {
        //your other code
        unset($_SESSION['validate']);
        $result['status']='2';
    }
}
else
{
    $result['error'].='[Er-01 Invalid source!]';
}
echo json_encode($result); 

?>

这可能不是最佳或有效的解决方案。我的经验水平不是很高,所以我想出了这个解决方案,该解决方案在所有可用的解决方案都有其局限性之后,才最能达到我的目的。在任何地方都没有,所以想在这里写。

注意:您可能会注意到它还包括其他一些部分,例如响应,成功以及演示文稿,脚本和后端文件之间的错误处理。

希望有帮助!