通过ajax表单提交发送阻止默认提交按钮

时间:2016-01-25 12:00:48

标签: jquery ajax forms

我有一个表单,我将其通过ajax发送到php文件来操作数据库。

// HTML

<form id='editUserForm' action='insert.php' method='post'>
  <input type='text' name="userName/>
  <input type='text' name="userLastName/>
  <input type='submit' name='editUser' value='submit'/>
</form>

// AJAX

    (function($){
    function processForm( e ){
        $.ajax({
            url: 'insert.php',
            dataType: 'text',
            type: 'post',
            contentType: 'application/x-www-form-urlencoded',
            data: $(this).serialize(),
            success: function( data, textStatus, jQxhr ){
                alert("Done");
            error: function( jqXhr, textStatus, errorThrown ){
                console.log( errorThrown );
            }
        });

        e.preventDefault();
    }

    $('#editUserForm').submit( processForm );
})(jQuery);

// insert.php

  if(isset($_POST['editUser'])){
if(isset($_POST['chUserStatus'])){
    $active='َactive'; 
}else{$active='disabled';}
$query="update admins set user='$_POST[chUserName]', pass='$_POST[chUserPass]',email='$_POST[chUserEmail]',level='$_POST[chUserLevel]',status='$active' where id=$_POST[userId]";
$result=mysqli_query($dbCnn,$query);
echo(mysqli_error($dbCnn));

} 问题出在这里,因为我的函数阻止了表单默认提交,它没有将提交btn名称/值发布到insert.php。如何将其作为参数发送到insert.php?

3 个答案:

答案 0 :(得分:1)

serialize()无法从button元素中检索任何属性,如果需要,您需要自己添加该信息:

var $button = $('#editUser :submit');

// in the $.ajax...  
data: $(this).serialize() + '&' + $button.prop('name') + '=' + $button.val(),

答案 1 :(得分:1)

$("#search").submit(function(e){
  e.preventDefault();
  $.ajax({
            url: 'insert.php',
            dataType: 'text',
            type: 'post',
            contentType: 'application/x-www-form-urlencoded',
            data: $(this).serialize(),
            success: function( data, textStatus, jQxhr ){
                alert("Done");
            },
            error: function( jqXhr, textStatus, errorThrown ){
                console.log( errorThrown );
            }
        });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="search">
<input name="q"/>
  <input type="submit" value="Submit"/>

</form>

在控制台中查看结果。

答案 2 :(得分:0)

您可以在序列化之前将其放在表单数据对象中,甚至可以在序列化后附加它。 就个人而言,我只是添加一个新的隐藏输入,如:

<input type="hidden" name="action" value="editUser" />