【问题标题】:PHP Not Picking Up Post Data from jQuery AJAX Form SubmitPHP没有从jQuery AJAX表单提交中获取帖子数据
【发布时间】:2014-09-20 10:23:19
【问题描述】:

我有一个带有这样的提交按钮的表单:

<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 提交中获取这个发布的变量?

【问题讨论】:

  • 你的php脚本中的print_r($_POST)给你什么?
  • URL“?edit-form”有效吗?
  • Matt,是的,它是“index.php?edit-form”的缩写。我试过那个网址,但还是不行。

标签: php jquery ajax forms submit


【解决方案1】:

在此处的 jQuery 文档中:http://api.jquery.com/serialize/
只有成功的控制才会被序列化,请看下面的文档:

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

所以提交按钮不会通过 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);
        }
    });
});

【讨论】:

  • 伊万,很好的信息。但是,在单击此特定按钮时执行此 AJAX 至关重要。由于输入提交按钮的名称为“delete-image”,我是否可以通过某种方式确定单击此按钮时提交的表单?
  • @GTSJoe 您可以添加一个名为 delete-image 的隐藏输入?
  • 我无法添加隐藏的输入字段,因为我在此表单中有两个提交按钮。因此,如果用户单击另一个按钮,则在单击该按钮时也会提交隐藏的输入。只有在单击该按钮时,我才需要能够在 中传递数据,这就是为什么避免隐藏字段至关重要。跨度>
  • @Ivan:是的,它确实有效,但现在页面像常规提交一样重新加载。 event.preventDefault();应该阻止这一点,但事实并非如此。为什么?页面不应为 AJAX 请求重新加载。
  • 您的 jQuery 脚本中可能有错误。请从 chrome 控制台查看更多详细信息。
【解决方案2】:

如果您不想在单击按钮时重新加载页面,那么只需使用发送 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>

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2012-02-20
    • 2018-04-25
    • 2023-03-29
    相关资源
    最近更新 更多