我在尝试通过AJAX上传 Laravel 5.2 中的文件时遇到问题。我想使用new FormData()
方法提交包含一些文本字段和文件输入的表单,但Request :: all()似乎在控制器中返回一个空数组。仅当我尝试上传图像时才会出现此问题。如果我将文件输入留空,一切都很好,所有文本输入都显示出来。我试图用每个选项改变AJAX调用,但结果相同。
表格:
<form id="my_form">
<input type="text" name="u_name" placeholder="Enter name" value="{{ $user->NAME }}">
<input type="email" name="u_email" placeholder="Enter email" value="{{ $user->EMAIL }}">
<input type="file" name="u_picture">
<input type="submit" id="submit" value="Save">
</form>
jQuery AJAX请求:
$('#my_form').submit(function(){
$.ajax({
type: "POST",
headers: {'X-CSRF-TOKEN': "{{ csrf_token() }}" },
dataType: "json",
url: "/submit",
contentType: false,
data : new FormData($('#my_form')[0]),
processData: false,
async: true,
success: function(data){
console.log(data);
}
}).fail(function(data) {
console.log('Error');
});
return false;
});
控制器方法:
public function editProfile(){
if(Request::hasFile('u_image'){
return 'It has image';
}
return Request::all();
}
输出文件输入为空:
Object {u_name: "Test", u_email: "abc@abc.com"}
输出文件输入非空:
[]
但是,在两种情况下似乎都能正确发送请求,因为在Google Chrome中的网络标签中,请求是这样的:
------WebKitFormBoundaryFZlyLOFBAsPNOk7v
Content-Disposition: form-data; name="u_name"
Test
------WebKitFormBoundaryFZlyLOFBAsPNOk7v
Content-Disposition: form-data; name="u_email"
abc@abc.com
------WebKitFormBoundaryFZlyLOFBAsPNOk7v
Content-Disposition: form-data; name="u_picture"; filename="1.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryFZlyLOFBAsPNOk7v--
我也尝试用async:false
发送AJAX,但没有结果。有什么我做错了吗?
编辑:即使使用Postman的AJAX调用,问题仍然存在
编辑2:我隔离了问题。在我的原始代码中,我使用方法Request::hasFile('u_picture')
来验证字段是否为空。没有if
声明,一切都像魅力一样(当然,在没有图片的情况下提交表单)。所以现在我的问题是:我该如何解决这个问题?
答案 0 :(得分:0)
我解决了这个问题...不知何故。我使用 case mixIt 2 2 of
Nice tuple -> fst tuple
Whoops -> ... some Haskell code to produce another tuple ...
外观来过滤请求,而不是使用导致错误的Request::hasFile()
方法。所以我的新控制器看起来像这样:
Validator
也许这不是正确的方法,但它正在发挥作用。希望它会帮助别人。