【发布时间】:2020-02-18 03:04:48
【问题描述】:
我在尝试使用带有 CakePHP 2.10.7 的 Ajax 将文件从视图传递到控制器时遇到了麻烦。
我的视图有以下输入:
<div id="staff-bg-image-container">
<!-- Image uploading box exists here. -->
</div>
<input type="file" id="background_image_file" name="background_image_file" style="display:none;" accept="image/png, image/jpeg">
我的 JavaScript 看起来像这样:
$('#staff-bg-image-container').on('click', () => $('#background_image_file').trigger('click') );
$('#background_image_file').on('change', upload_background);
function upload_background()
{
var file = this.files[0];
data = new FormData();
data.append('file', file);
$.ajax({
url: '/staff/ajaxUploadBackgroundImage',
type: 'POST',
data: data,
contentType: false,
processData: false,
cache: false,
success: function(res){
console.log(res);
},
});
}
但是当我将此请求发送到控制器时,$this->request->data 数组为空。我也尝试过使用 XMLHttpRequest 而不是 jQuery 来执行此操作,但结果是一样的。为什么 CakePHP 不能识别文件?
编辑:我可以使用 $_FILES 全局数组访问文件。但是,根据 CakePHP 文档,它应该出现在请求数据数组中。如果你能告诉我为什么不是这样,我将不胜感激。
【问题讨论】:
-
您在表单中添加了 enctype='multipart/form-data' 吗?
-
@Sehdev 没有表格。据我了解,如果我只需要发送一个字段,则无需创建表单。
-
当元素不可见时如何执行更改事件 style="display:none;"??
-
@Sehdev 因为该示例与工作相关,所以我只包含了有问题的部分。抱歉,如果不清楚。我已经更新了我的问题以减少混乱。我可以很好地提交请求。但是 CakePHP 请求对象不包括发布的文件。
标签: jquery ajax cakephp-2.x