【发布时间】:2015-06-05 21:58:36
【问题描述】:
当尝试使用 AJAX 上传图像而不直接提交表单并将 FormData 对象发送到服务器时,它返回空 $_FILES 数组。但是如果我使用<input type="submit"> 标签$_FILES 提交表单,则数组不为空并接收数据。
HTML
<form action="core/update.php" method="post" enctype="multipart/form-data" id="profile-photo" name="profile-photo-form">
<input type="file" id="photo-filename" name="avatar" class="edit-show panel photo-upload">
</form>
<button class="save-button" disabled="disabled">Save</button>
JS
$('#profile-photo').on('submit', function(e) {
e.preventDefault();
var form = $('#profile-photo')[0];
var formData = new FormData(form);
formData.append('avatar', $('#photo-filename')[0].files[0]);
$.ajax({
url: "core/update.php",
data: formData,
type: "POST",
contentType: false,
cache: false,
processData: false
});
console.log(formData);
});
$('.save-button').on('click', function() {
if ($('#photo-filename').val != '') {
$('#profile-photo').submit();
};
}
UPD
同样$('#profile-photo').serialize() 返回空白字符串。
UPD 2
它会与页面上的其他 AJAX 请求冲突吗?
【问题讨论】:
-
为什么要添加两次文件输入?它已经在您使用
new FormData(form)添加的表单中。 -
以防万一。我尝试了很多添加数据的变体,但 FormData 是空的。
-
Musa,正在发送请求。请求负载:
------WebKitFormBoundarykKBm9n5RL1SEIQD5 Content-Disposition: form-data; name="avatar"; filename="s369unD7-50[2].jpg" Content-Type: image/jpeg ------WebKitFormBoundarykKBm9n5RL1SEIQD5-- -
找到解决方案了吗?