我正在尝试使用AJAX验证Laravel表单中的图像字段,但它似乎总是空的。即使我已经选择了一个文件。如何使用ajax验证检查文件输入是否为空?
表单代码:
{{ Form::open('files'=>'true') }}
...
{{ Form::file('image') }}
...
{{ Form::close() }}
AJAX电话:
var form_data = $("#form").serialize();
$.ajax({
dataType:"json",
method:'post',
url:'/ajax/validate?'+form_data,
success:function(data){...}
});
控制器方:
...
$rules['image'] = 'required';
...
$validator = Validator::make(Input::all(),$rules);
if($validator->fails()){
...
}else{
...
}
答案 0 :(得分:1)
我有同样的问题。
通过用serialize()
替换FormData()
来解决我的问题。以下是 jquery / ajax :
$("#form").submit(function(e){
e.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type : "post",
url : '{{ URL::to('/post')}}',
dataType : "json",
data: new FormData(this),
processData: false,
contentType: false,
success : function(response){
if(response.success == true){
alert('done');
}else{
$.each(response.errors,function(k,error){
alert(error);
}
}
}
});
});
并且在laravel验证中你需要以jSon的形式返回响应(我不在这里写完整的代码):
if($validator->fails()){
$errors = $validation->getMessageBag()->toArray();
//Below Error also might work :
//$errors = $validator->messages()->all();
$result = ['success' => false , 'errors' => $errors];
}else{
$result = ['success' => true, 'errors' => null];
}
return Response::json($result);
注意强>
我还在努力。我很确定它会检测到图像,因为当(在我的情况下)图像大小超过2MB时,它不会上传它。
如果您使用FormData()
...
我只是不确定答案。
祝你好运;
编辑
要验证最大文件大小,您应该直接在php.ini中编辑upload_max_filesize。否则Laravel可能无法检测超过2MB的文件大小(我猜)因为php本身会阻止它。
现在我的验证工作正常。