如何在laravel控制器中获取ajax post方法发送的formdata值

时间:2016-04-18 10:58:16

标签: php angularjs ajax laravel controller

我正在尝试使用formdata通过ajax发送包含图像文件的一组数据,但是当我想在laravel控制器中访问该数据时,它会显示一个空白数组。

这是我的ajax代码 -

var fd = new FormData();
    fd.append("photo",files[0]);
    fd.append("user_id",localStorage.getItem('userId'));
    fd.append("doctype","dl_image");       
    console.log(fd);



   //ajax code
    $http.post('uploadfile', fd, {    
            withCredentials: true,      
            headers: { 'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content') }       
     }).success(function(data, status) {        

               console.log(data);


     });

PHP代码 -

    $data = Request::all();
    $photo = Request::file('photo');
    $userid = Request::get('user_id');
    $doctype = Request::get('doctype');


    $postData = array(
        'photo' => $photo,
        'user_id' => $userid,
        'doctype' => $doctype  
    );
    var_dump($data);
    die();

当数据被转储到浏览器的控制台时,它会显示

array(0) {
}

需要帮助。

3 个答案:

答案 0 :(得分:1)

AngularJS使用application/json类型&发送POST请求{默认} JSON正文 所以我认为你需要使用:

headers: { 'Content-Type' : 'application/x-www-form-urlencoded'},
data: $.param(data)
ajax代码中的

您可能需要使用$name = Input::get('name');而不是$userid = Request::get('user_id');

之类的内容

答案 1 :(得分:0)

请尝试序列化jquery的方法。

function myForm( form ){
    var formData = $(form).serialize();
    att=form.attr("action") ;
    $.post(att, formData).done(function(data){
        alert(data);
    });
    return true;
}

答案 2 :(得分:0)

使用FormData API POST文件和数据时,务必将Content-Type header设置为undefined

尝试:headers: { 'Content-Type': undefined }