【问题标题】:Validating via AJAX a file input in a Laravel form通过 AJAX 验证 Laravel 表单中的文件输入
【发布时间】: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{
    ...
}

【问题讨论】:

    标签: php jquery ajax validation laravel


    【解决方案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 本身会阻止它。

    现在我的验证工作正常了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2018-01-10
    • 1970-01-01
    • 2017-10-27
    • 2015-08-20
    • 2013-05-02
    • 2016-07-22
    相关资源
    最近更新 更多