PHP不从jQuery AJAX表单提交发布数据

时间:2014-07-29 05:18:30

标签: php jquery ajax forms submit

我有一个带有提交按钮的表单,如下所示:

<form action="?edit-form" method="post" class="addEdit">
    <input type="submit" name="delete-image" value="Delete Image">
</form>

我的jQuery AJAX是:

$.ajax({
    url: $('form.addEdit').attr('action'),
    type: $('form.addEdit').attr('method'),
    data: $('form.addEdit').serialize(),
    success: function(html) { }
});

在我的PHP中,我无法获取$ _POST ['delete-image'] isset(),尽管发送表单的提交按钮名为“delete-image”。

if (isset($_POST['delete-image'])) {
}

应该设置“delete-image”,因为那是我点击的提交按钮。为什么PHP没有从这个AJAX提交中找到这个可用的变量?

2 个答案:

答案 0 :(得分:2)

在jQuery文档中:http://api.jquery.com/serialize/
只有成功的控制序列化,请参阅以下文档:

  

注意:只有“成功控件”被序列化为字符串。没有提交按钮值被序列化,因为表单未使用按钮提交。要使表单元素的值包含在序列化字符串中,该元素必须具有name属性。复选框和单选按钮(“radio”或“checkbox”类型的输入)中的值仅在选中时才包括在内。文件选择元素中的数据未序列化。

所以提交buttn不会通过jQuery.serialize()函数序列化。解决方法是你可以添加隐藏的输入,它将被序列化。

<强>更新
您需要更改表单提交ajax以绑定按钮单击。在ajax请求中,您可以手动添加按钮值。以下是我正在运行的代码。

$( "#delImage" ).click(function( event ) {
    event.preventDefault();
    $form = $(this).parent('form');
    $btnid = $(this).attr('name');
    $btnval = $(this).attr('value');


    $.ajax({
        url: $form.attr('action'),
        type: $form.attr('method'),
        data: { "btnid" : $btnid, "btnval": $btnval, "form-data": $form.serialize() },
        success: function(html) {
            console.log(html);
        }
    });
});

答案 1 :(得分:0)

如果您不想在点击按钮时重新加载页面,那么只需使用简单的方式发送ajax调用:

var mydata = $('form.addEdit').serialize();
$.ajax({
type:'POST',
url: 'file.php',
data: mydata,
dataType:'json',
success: function(responseText){
// enter code here
 });
}
});

简单地使用没有这些元素的表单

<form class="addEdit">
<input type="submit" name="delete-image" value="Delete Image">
</form>