【问题标题】:Only text values being posted to php file but not files只有文本值被发布到 php 文件而不是文件
【发布时间】:2017-03-31 11:52:28
【问题描述】:

我有一个 HTML 表单的以下代码:

<form id="idForm" method="post" enctype="multipart/form-data">
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <input name="image" type="file" />
    <input type="submit" name="submit" value="Submit" />
</form>

和以下 Javascript 代码在表单所在的同一页面上。另外,这段代码写在表单代码下面:

$("#idForm").submit(function() {
    alert("hi");
    var url = "submit.php"; 

    $.ajax({
        type: "POST",
        url: url,
        data: $("#idForm").serialize(),
        success: function(data) {
            alert(data);
        }
    });

    return false;
});

这是我用来查看表单数据是否正在发布的 PHP 代码:

if (isset($_FILES['image'])) {
    $image = $_FILES['image'];
    echo $image;
}

if (isset($_POST['first'])) {
    $name = $_POST['first'];
    echo $name;
}

使用上面的代码,似乎附件没有被发送到 PHP 文件。仅发送值,因为当我使用 Google Chrome 开发工具检查元素时会回显它们。

我希望能够将文本值和文件发布到 PHP 文件进行处理。

为什么我会遇到这个问题?我该如何解决?

另外,作为解决方案的一部分,我想防止在单击提交按钮时刷新页面。

非常感谢!

【问题讨论】:

  • 文件选择元素中的数据未序列化。api.jquery.com/serialize
  • “我希望提交按钮在单击时页面不会刷新”将事件传递给您的处理程序,然后将 e.preventDefault() 传递给 return false
  • 将此添加到您的 ajax processData: false, // tell jQuery not to process the data contentType: false, // tell jQuery not to set contentType
  • 目前,页面无法加载...我同时添加了 processData: false 和 contentType: false,但现在这样做之后,没有任何内容被发布...甚至文本值也没有.. .

标签: javascript php jquery html


【解决方案1】:

很遗憾 input[type='file'] 不能被 .serialize() 提交,你必须通过formData 来操作。 你会在here中找到一个非常好的formData示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2022-11-14
    • 2021-01-19
    • 2013-04-09
    • 2020-05-30
    相关资源
    最近更新 更多