通过ajax上传文件

时间:2016-01-24 13:03:39

标签: jquery html ajax

我现在尝试这几天了!没有什么对他人有用,对我有用!我现在必须完成它。

所以这是非常基本的:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="browseFile" id="photo" />
    <input type="submit" id="send" />
</form>

如您所见,有一个带有文件输入和提交按钮的HTML表单。 对于我想要制作的内容,我需要在将其值更改为服务器后立即从输入字段发送文件。

让我们跳过事件监听器和验证的部分。

这是javascript,它应该能够获取输入字段的值并将其发送到服务器:

var inputFilePhoto = document.getElementById("photo");
var imageFile = inputFilePhoto.files[0];

var formData = new FormData();             
formData.append("file", imageFile);

$.ajax({
    type: "POST",
    url: "ajax.php",
    data: formData,
    contentType: false,
    processData: false,

    success: function (output) {
        document.write(output);
        alert("OK");
    },
    error: function () {
        alert("Error");
    }
});

正如您所看到的,我使用的是FormData对象,这对我来说几天前是新的。它适用于文本字段等,但不适用于文件输入字段。我还尝试将整个表单应用于此对象(new FormData($("form")[0])),但是 - 再次 - 忽略了类型&#34; file&#34;的输入字段。就好像它们不存在一样。

回到上面的例子:ajax.php没有调试$ _POST。所以这是ajax.php:

<?php

echo '<pre>';

var_dump($_POST);
echo '</pre>';

结果是一个空数组array(0) { }

技术详情:使用jQuery 2.2.0在Mac OS X 10.11上的Chrome v48上测试

我希望有人能最终帮助我,我接受使用js插件的解决方案。

1 个答案:

答案 0 :(得分:2)

当PHP解析表单数据时,文件输入中的数据显示在the $_FILES superglobal中,而不是$_POST