Php 带有2个提交按钮的jQuery提交ajax表单

Php 带有2个提交按钮的jQuery提交ajax表单,php,javascript,jquery,Php,Javascript,Jquery,我试图实现以下目标,在php中,我有一个类似这样的表单: <form method="post" id="form_1" action="php.php"> <input type="submit" value="add" name="sub"/> <input type="submit" value="envoi" name="sub"/> </form> $(function(){ $('form#form_1 :submit').su

我试图实现以下目标,在php中,我有一个类似这样的表单:

<form method="post"  id="form_1" action="php.php">
<input type="submit" value="add" name="sub"/>
<input type="submit" value="envoi" name="sub"/>
</form>
$(function(){
  $('form#form_1 :submit').submit(function(){
    var _data = $(this).closest('form').serializeArray(); //serialize form
    _data.push({ name : this.name, value: this.value });  //add this name/value
    _data = $.param(_data);                               //convert to string
    $.ajax({
      type: 'POST',
      url: "php.php?",
      data: _data,
      success: function(html){
        $('div#1').html(html);
      }
    });
    return false; //prevent default submit
  });
});

表单操作文件为:

<?php

if( $_POST["sub"]=="add"){  ?>

 <script>
 alert("")
 </script>
<?php  echo "ZZZZZZ";   ?>

<?php } ?>

警报(“”)
因此,这意味着,如果我按带有value add的sub键,将出现一个警报提示,我如何使用Ajax请求执行相同的操作(区分提交和提交):

因此,以下代码不起作用:

 $(function(){
      $('form#form_1').submit(function(){
var _data= $(this).serialize()
$.ajax({
        type: 'POST',
        url: "php.php?",
        data:_data,
        success: function(html){
         $('div#1').html(html)

          }
     })
})
  })
  </script>
</head>

<body>
<div id="1" style="width: 100px;height: 100px;border: 1px solid red"></div>

<form method="post"  id="form_1" action="javascript:;">
<input type="submit" value="add" name="sub"/>
<input type="submit" value="envoi" name="sub"/>
</form>
</body>
$(函数(){
$('form#form_1')。提交(函数(){
var\u data=$(this).serialize()
$.ajax({
键入:“POST”,
url:“php.php?”,
数据:_数据,
成功:函数(html){
$('div#1').html(html)
}
})
})
})

您可以将事件处理程序放在按钮上,而不是窗体上。从表单中获取参数,然后为按钮添加参数,然后发布表单。确保处理程序返回“false”


您必须显式地添加“sub”参数,因为当您调用“serialize()”时,jQuery不包括这些参数

 $(function(){
      $('form#form_1').submit(function(){
         var _data= $(this).serialize();
         $.ajax({
            type: 'POST',
            url: "php.php?",
            data:_data,
            success: function(html){
               $('div#1').html(html);    
            }
         });
      });
  });

在这种情况下,您需要手动将submit按钮添加到发布的数据中,如下所示:

<form method="post"  id="form_1" action="php.php">
<input type="submit" value="add" name="sub"/>
<input type="submit" value="envoi" name="sub"/>
</form>
$(function(){
  $('form#form_1 :submit').submit(function(){
    var _data = $(this).closest('form').serializeArray(); //serialize form
    _data.push({ name : this.name, value: this.value });  //add this name/value
    _data = $.param(_data);                               //convert to string
    $.ajax({
      type: 'POST',
      url: "php.php?",
      data: _data,
      success: function(html){
        $('div#1').html(html);
      }
    });
    return false; //prevent default submit
  });
});
我们使用来获取表单()的序列化版本,在通过将其序列化为字符串之前,将名称/值对添加到该数组中


最后添加了一个
return false
,以防止默认提交行为离开页面。

提供了一些高级功能,并自动执行了一些我们必须手动执行的任务,请查看它。它还提供了更好的处理表单元素、序列化的方法,您可以在提交表单之前插入预处理函数。

您的javascript中缺少分号(
)。在Js中分号不是必需的,这不是问题所在。它在做什么,你唯一的问题是它仍然在做完整的回发吗?我不能用Ajax表单提交区分两个提交按钮。上帝啊,我想用-1作为你的答案。现在可以回到0了。这可能不是你的答案,但这是一个很好的标准,为什么不加-1呢