通过 AJAX 验证 Laravel 表单中的文件输入
Posted
技术标签:
【中文标题】通过 AJAX 验证 Laravel 表单中的文件输入【英文标题】:Validating via AJAX a file input in a Laravel form 【发布时间】:2015-04-02 22:52:04 【问题描述】:我正在尝试使用 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
...
【问题讨论】:
【参考方案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 本身会阻止它。
现在我的验证工作正常了。
【讨论】:
感谢 Alexandre Thebaldi,***.com/questions/32279631/…以上是关于通过 AJAX 验证 Laravel 表单中的文件输入的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 AJAX 验证 Laravel 表单时出现错误 422