Ajax表单与Laravel 5中的文件一起提交


Ajax form submit with file in Laravel 5

我正在尝试在laravel 5中实现文件上传。但首先要发送数据,例如,简单字符串。我的表格:

    {!!Form::open(["url"=>"/photos", "method" => "post", "files"=>true, "onsubmit"=>"send();return false;"])!!}    
    {!!Form::text("title", null, ["class"=>"form-control"])!!}    
    {!!Form::submit("Send", ["class"=>"btn btn-primary", "id" => "submitForm"])!!}    
    {!!Form::close()!!} 

我的发送功能

function send() {
    var formData = new FormData(this);
    $.ajax({        url: "/photos",
                    method: 'POST',
                    data: formData,
                    processData: false,
                    contentType: false,
                    cache: false,
                    success: function(data) {
                        console.log(data);
                    },
                    error: function(data) {                   
                    }
                });
}

我的路线:

Route::post("/photos", "PhotosController@store");

我的商店功能

public function store()
{
    $data = 'Illuminate'Support'Facades'Request::all();
    return $data;
}

我有一个空数据!通过Formdata没有收到任何信息,但如果我将参数从Formdata更改为{text:"Hola"},所以我从服务器上看到了答案,但通过文本,我以后无法上传照片。我做错了什么?为什么我收到空的表单数据?感谢

由于我遇到了同样的问题并找到了解决方案,我想我应该把它发布在这里。

首先,您必须使用var formData = $(this).serializeArray();而不是var formData = new FormData(this);来获取表单数据。

根据文档,Laravel将自动返回一个带有422状态代码的HTTP响应,其中包括验证错误的JSON表示。

完整ajax调用:

//#ajax-form is the id of your form.
$("#ajax-form").submit(function(e)
    {
        var postData = $(this).serializeArray();
        var formURL = $(this).attr("action");
        $.ajax(
            {
                url : formURL,
                type: "POST",
                data : postData,
                success:function(data)
                {
                    console.log(data);
                    //data: return data from server
                },
                error: function(data)
                {
                    console.log(data.responseJSON);
                    //in the responseJSON you get the form validation back.
                }
            });
        e.preventDefault(); //STOP default action
        e.unbind(); //unbind. to stop multiple form submit.
});

如果你想通过AJAX上传文件,我建议你阅读这篇文章。希望这能有所帮助!

快乐编码:-)