php - 使用 Ajax 发送表单数据时 PHP 没有得到 $_FILES
问题描述
我正在尝试在我的网站上创建一个上传元素。我想要做的是一个上传按钮,当用户从计算机中选择一个文件时,它会立即将它上传到服务器。
这是我的表格:
<form id="createAlert" name="createAlert" enctype="multipart/form-data" method="POST" action="createAlert.php">
<input name="title" type="text" class="input-medium" maxlength="36"></input>
<textarea name="content" rows="7" cols="90" class="input-short" style="font-family: arial; width: 80%; resize: none; height: 250px"></textarea>
<input name="push" type="checkbox"></input>
<input enctype="multipart/form-data" name="img" id="img" size="35" type="file"/>
<input class="submit-gray" type="submit" value="POST ALERT"/>
</form>
这是我的 Javascript 代码,它将文件作为FormData
对象发送到上传页面 ( upload.php
):
$('#img').live('change', function() {
var formData = new FormData();
formData.append('file', $('#img')[0].files[0]);
$.ajax({
url : 'upload.php',
type : 'POST',
data : formData,
enctype: 'multipart/form-data',
success : function(data) {
console.log(data);
alert(data);
},
cache: false,
contentType: false,
processData: false
});
});
到目前为止,一切都很好 - 一切正常。问题upload.php
在于接收FormData
. 这是它的代码(它只是一个测试版本,它还没有上传文件):
<?php
print file_get_contents('php://input');
var_dump($_FILES);
var_dump($_POST);
问题是var_dump($_FILES);
and的输出var_dump($_POST)
是两个空数组,而在file_get_contents('php://input')
我得到文件数据。
这是输出(我用上传文件的内容剪掉了部分......):
------WebKitFormBoundaryw4nmFcISqYuAWQOS
Content-Disposition: form-data; name="file"; filename="Sem Título-1.png"
Content-Type: image/png
//Here is the file I uploaded...
------WebKitFormBoundaryw4nmFcISqYuAWQOS--
array(0) {
}
array(0) {
}
我在这里阅读了数十个问题的答案以及我遇到的问题的许多解决方案,但没有一个解决了问题。
我究竟做错了什么?为什么我只在 php://input 中收到文件但没有使用$_FILES
?
谢谢!
解决方案
我建议您更新您正在使用的 jQuery 版本。live()
5 多年前已弃用并从源中删除,数据在$.ajax()
.
您使用的旧版本可能没有这些更新,并且没有以正确的方式将 FormData 添加到请求中。
推荐阅读
- wpm - WPM 不接受类型名
- ios - 在 Swift 中传递所有枚举值
- python - 如何在 python (anaconda) 中使用旧版本的 GLIBC?
- notepad++ - 搜索一系列数字并将它们分组到记事本++中
- c# - 保存的游戏无法正常工作。ConflictResolutionStrategy、DataSource 或 SavedGameMetadataUpdate 的问题
- r - 是否可以在主应用程序上使用 actionButton 来设置模块内的 shinyjs::reset 输入?
- c++ - 我的基于 libcurl 的程序从第一个“curl_easy_setopt”开始不起作用并返回 0xC0000374
- .net - 外部 Java Axis 服务 - 反序列化问题
- java - 使用ajax在java中实时搜索
- swift - 更快的 json 响应