通过 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

在 Laravel 的 ajax 中显示多个输入数组验证

Laravel 自定义验证和 ajax

在 ajax 中捕获 laravel 验证异常

通过 jquery submit() 提交表单后的 Laravel 文件验证;

Laravel:通过无表单的 AJAX 向控制器发送数据