通过AJAX验证Laravel表单中的文件输入

时间:2015-02-03 16:37:27

标签: php jquery ajax validation laravel

我正在尝试使用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 个答案:

答案 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本身会阻止它。

现在我的验证工作正常。