javascript - 使用 AJAX 和 PHP 上传文件 - $_FILES 数组为空

标签 javascript php jquery ajax

我已经阅读了近 20 个不同的论坛帖子/stackoverflow 问题/答案,但我就是无法完成这项工作。我已经使用 jQuery/PHP 工作了大约 5 年,但这是我第一次需要使用 AJAX 做这样的事情。

所以...现在,我只是测试并尝试上传 .txt 文件,并尝试使用 file_get_contents() 获取它的内容,并将其发送回我的 JS 代码。

我已经删除了所有花哨的人员并尽可能地简化了我的文件,所以这是我的 HTML 文件:

<div class="container-fluid">
    <div class="row">
        <div class="col-xs-12">
            <form id="uploadForm" action="url/to/php/script">
                <input type="file" name="frame" />
                <input type="submit" value="UPLOAD" />
            </form>
        </div>
    </div>
</div>

和我的 JS

$("#uploadForm").bind('submit',(function(e) {
    e.preventDefault();
    $.ajax({
        url: 'url/to/php/script',
        type: "POST",
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData: false,
        success: function(data) {
            console.log(data);
        }
    });
}));

在我的 PHP 脚本中,我有 var_dump($_FILES),它给我一个空数组。

我的 JS 和表单是从 stackoverflow 的一个答案中复制的。网址:$_POST and $_FILES empty after AJAX file upload - 因为它被标记为有效但对我来说......仍然是空的。

通常我的表单有 enctype="multipart/form-data"method="post" 但没有区别。

我的 jQuery 库:http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js

我来到这里是因为我觉得没有更多的东西可以尝试了,无论我做什么,$_FILES 数组都是空的。

最佳答案

您的 AJAX 逻辑没问题。问题是因为您使用的是非常、非常 的 jQuery 版本,并且在多年的开发过程中对 AJAX 逻辑进行了许多调整 - 特别是自增加对 FormData 和通过 AJAX 发送二进制数据的支持。

如果您不需要旧版 IE 支持,您应该至少将 jQuery 升级到 1.12,最好是 3.2。

关于javascript - 使用 AJAX 和 PHP 上传文件 - $_FILES 数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43200328/

相关文章:

php - 寻找 getElementById 和 innerHTML 的 PHP 等价物

javascript - 使用 .blur() 通过 ajax 发送不同的对象

javascript - 从 html 页面访问 js 中定义的变量?

javascript - 我的 Wordpress、Bootstrap 主题不适用于 JavaScript

php - 在交易过程中重新加载页面

javascript - 如何改变两张图片之间的动画速度? [像素相机jquery插件]

javascript - 函数仅在刷新页面时执行,而不是在首次加载时执行

javascript - jquery addClass 添加子类不起作用

javascript - 检查 HTTP GET 请求返回的文件类型

javascript - 简单的 jQuery 脚本在 Chrome 中工作,在 IE 中损坏