Javascript PHPAJAX:如何在表单上使用两个提交按钮,每个按钮用于不同的目的

Javascript PHPAJAX:如何在表单上使用两个提交按钮,每个按钮用于不同的目的,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,在发布这个问题之前,我查看了下面的链接。 但我仍然面临这个问题。 下面是代码。 html代码 <form name="posting" id="posting" method="post" action="posting_bk.php" role="form"> <input class="btn btn-home" type="submit" name="publish" id="publish" alt="Publish" value="Preview and

在发布这个问题之前,我查看了下面的链接。

但我仍然面临这个问题。 下面是代码。 html代码

<form name="posting" id="posting" method="post" action="posting_bk.php" role="form">
    <input class="btn btn-home" type="submit" name="publish" id="publish" alt="Publish" value="Preview and Post" />
    <input class="btn btn-home" type="submit" name="save" id="save" onclick="return confirm('Are you sure you want to Submit.')" alt="Save" value="Save as Draft" /></center>
</form>
问题是我没有得到任何输出。我应该得到测试发布测试保存

我计划使用ajax,下面是我为ajax编写的代码

<script type="text/javascript">
    $('document').ready(function() {
        $("#posting").on("submit", function(e) {
            e.preventDefault;
            var btn = $('#publish');

            $.ajax({
                type: 'post',
                url: $('form#posting').attr('action'),
                cache: false,
                dataType: 'json',
                data: $('form#posting').serialize(),
                beforeSend: function() {
                    $("#validation-errors").hide().empty();
                },
                success: function(data) {
                    if (data.success == false) {
                        var arr = data.errors;
                        $.each(arr, function(index, value) {
                            if (value.length != 0) {
                                $("#validation-errors").append('<div class="alert alert-danger"><strong>' + value + '</strong><div>');


                            }
                        });
                        $("#validation-errors").show();
                        btn.button('reset');
                    } else {
                        $("#success").html('<div class="alert alert-success">Basic details saved successfully. <br> If you want to edit then please goto <a href="edit.php">Edit</a>. <div>');
                        $('#title').val('');

                    }
                },
                error: function(xhr, textStatus, thrownError) {
                    alert('Something went to wrong.Please Try again later...');

                    btn.button('reset');
                }
            });
            return false;
        });
    });
</script>

$('document').ready(函数(){
$(“#过账”)。关于(“提交”,功能(e){
e、 防止违约;
var btn=$(“#发布”);
$.ajax({
键入:“post”,
url:$('form#posting').attr('action'),
cache:false,
数据类型:“json”,
数据:$('form#posting')。序列化(),
beforeSend:function(){
$(“#验证错误”).hide().empty();
},
成功:功能(数据){
if(data.success==false){
var arr=数据错误;
$。每个(arr,函数(索引,值){
如果(value.length!=0){
$(“#验证错误”).append(“”+value+””);
}
});
$(“#验证错误”).show();
btn.按钮(“重置”);
}否则{
$(“#success”).html('已成功保存基本详细信息。
如果要编辑,请转到'); $('#title').val(''); } }, 错误:函数(xhr、textStatus、thrownError){ 警报('出现问题。请稍后再试…'); btn.按钮(“重置”); } }); 返回false; }); });

如果我没有使用ajax,那么它工作得很好。这似乎是Ajax的一个问题,因为无论您单击哪个按钮,“发布”和“保存”都将始终处于设置状态,所以您无法按照您尝试的方式执行

您需要在客户端执行此操作。将事件侦听器绑定到每个按钮,该侦听器将传递您想要的任何“操作”变量

例如,如果您使用jQuery:

$('#publish').on('click', function(e){
   e.preventDefault();
   // Set some hidden form variable called action to a value of publish
   // submit form or make an ajax call.
});

$('#save').on('click', function(e){
   e.preventDefault();
   // Set some hidden form variable called action to a value of save
   // submit form or make an ajax call.
});

现在,您的PHP可以检查$_POST['action']=='save'|'publish',并相应地执行操作。

您不能按照尝试的方式执行操作,因为无论单击哪个按钮,发布和保存都将始终处于设置状态

您需要在客户端执行此操作。将事件侦听器绑定到每个按钮,该侦听器将传递您想要的任何“操作”变量

例如,如果您使用jQuery:

$('#publish').on('click', function(e){
   e.preventDefault();
   // Set some hidden form variable called action to a value of publish
   // submit form or make an ajax call.
});

$('#save').on('click', function(e){
   e.preventDefault();
   // Set some hidden form variable called action to a value of save
   // submit form or make an ajax call.
});

现在,您的PHP可以检查$_POST['action']='save'|'publish'并相应地执行操作。

我将单击提交,获取单击按钮的id并将其传递给PHP:

$('#posting input[type="submit"]').on("click", function(e) {                
                e.preventDefault;
                var btn = $('#publish');
                var el = $(this).attr('id');
                $.ajax({
                    type: 'post',
                    url:$('form#posting').attr('action'),
                    cache: false,
                    dataType: 'json',
                    data: {data:$('form#posting').serialize(),action:el},
                    beforeSend: function() { 
                        $("#validation-errors").hide().empty(); 
                    },
                    success: function(data) {
                        if(data.success == false)
                            {
                                var arr = data.errors;
                                $.each(arr, function(index, value)
                                {
                                    if (value.length != 0)
                                    {
                                        $("#validation-errors").append('<div class="alert alert-danger"><strong>'+ value +'</strong><div>');


                                    }
                                });
                                $("#validation-errors").show(); 
                                btn.button('reset');                            
                            } else {
                                $("#success").html('<div class="alert alert-success">Basic details saved successfully. <br> If you want to edit then please goto <a href="edit.php">Edit</a>. <div>');
                                $('#title').val('');

                            }
                    },
                    error: function(xhr, textStatus, thrownError) {
                        alert('Something went to wrong.Please Try again later...');

                        btn.button('reset');
                    }
                });             
                return false;
            });
        });

我将使用click submit,获取单击按钮的id并将其传递给php:

$('#posting input[type="submit"]').on("click", function(e) {                
                e.preventDefault;
                var btn = $('#publish');
                var el = $(this).attr('id');
                $.ajax({
                    type: 'post',
                    url:$('form#posting').attr('action'),
                    cache: false,
                    dataType: 'json',
                    data: {data:$('form#posting').serialize(),action:el},
                    beforeSend: function() { 
                        $("#validation-errors").hide().empty(); 
                    },
                    success: function(data) {
                        if(data.success == false)
                            {
                                var arr = data.errors;
                                $.each(arr, function(index, value)
                                {
                                    if (value.length != 0)
                                    {
                                        $("#validation-errors").append('<div class="alert alert-danger"><strong>'+ value +'</strong><div>');


                                    }
                                });
                                $("#validation-errors").show(); 
                                btn.button('reset');                            
                            } else {
                                $("#success").html('<div class="alert alert-success">Basic details saved successfully. <br> If you want to edit then please goto <a href="edit.php">Edit</a>. <div>');
                                $('#title').val('');

                            }
                    },
                    error: function(xhr, textStatus, thrownError) {
                        alert('Something went to wrong.Please Try again later...');

                        btn.button('reset');
                    }
                });             
                return false;
            });
        });


您面临的问题在哪里?请检查您的代码。工作正常。ajax有问题吗?如果我使用ajax,那么可能会出现问题。发生了吗?您面临的问题在哪里?请检查您的代码。工作正常。ajax有问题吗?如果我使用ajax,那么可能会出现问题。会发生吗?如果两个按钮都设置了,为什么没有结果?请参阅OP已使用了
如果elseif
,则必须满足一个条件(如果两个条件都已设置)。这里不是这样。OP的代码运行良好。@Mr.Engineer有几个原因。1.他将数据类型设置为json,并发出纯文本。2.他实际上没有输出成功回调中返回的数据中的任何内容。data.success将是未定义的,这是错误的。我不是说OP编辑的
ajax
。我说的是没有ajax的简单表单提交。如果两个按钮都设置了,为什么没有结果?请参阅OP已使用了
如果elseif
,则必须满足一个条件(如果两个条件都已设置)。这里不是这样。OP的代码运行良好。@Mr.Engineer有几个原因。1.他将数据类型设置为json,并发出纯文本。2.他实际上没有输出成功回调中返回的数据中的任何内容。data.success将是未定义的,这是错误的。我不是说OP编辑的
ajax
。我说的是没有ajax的简单表单提交。我收到了E_通知:type8--未定义索引:action error.var_dump$_post的值您的代码运行良好,但我发现post存在问题。在firebug中,我在post下找到了两个值action和data。在操作中,我找到了发布/保存,但在数据中,它显示了所有表单数据。当我试图获取post表单数据时,它在php文件中是空的。我不确定我做错了什么。您应该能够使用
$\u POST['data']['fieldname']
获取值,谢谢您的回答。我从过去9个小时就一直在等你,我收到了E_通知:类型8--未定义索引:action error.var_dump$_post的值您的代码运行正常,但我发现post有问题。在firebug中,我在post下找到了两个值action和data。在操作中,我找到了发布/保存,但在数据中,它显示了所有表单数据。当我试图获取post表单数据时,它在php文件中是空的。我不确定我做错了什么。您应该能够使用
$\u POST['data']['fieldname']
获取值,谢谢您的回答。从过去的9个小时起我一直在等你