在laravel 5.4

时间:2018-02-08 18:15:20

标签: php ajax laravel laravel-5

在我的应用程序中,我需要上传一个菜的封面图片。

这是我的AJAX电话:

$('#addDishForm').submit(function(e) {
    e.preventDefault();
    var el = $(this);
    var formAction = el.attr('action');
    var formValues = el.serialize();
    console.log(formValues);

    $.ajax({
        type: 'POST',
        url: '/admin/menu',
        data: new FormData(el[0]),
        success: function (data) {
            console.log(data);
        },
        error: function(data) {
            console.error(data);
        }
    });
}); 

我在控制台的控制器中遇到错误return

  

未捕获的TypeError:非法调用

解决方法是什么?

以下是控制器的方法:

public function store(Request $request)
{
    if($request->hasFile('cover_image'))
    {
        return response()->json([ 'success' => true, 'message' => 'File exists' ]);
    }
    else 
    {
        return response()->json([ 'success' => false, 'message' => 'File doesn\'t exist' ]);
    } 
}

路线:

Route::middleware('auth')->prefix('/admin')->namespace('Admin')->group(function () {
    // other routes ...
    Route::post('/menu', 'MenuController@store');
    // other routes ...
});

以下是表格:

{!! Form::open([ 'method' => 'POST', 'enctype' => 'multipart/form-data', 'id' => 'addDishForm' ]) !!}
    // other form controls ...
    {{ Form::file('cover_image', [ 'class' => 'dropify', 'data-max-file-size' => '2M' ]) }}
    // other form controls ...
{!! Form::close() !!}

1 个答案:

答案 0 :(得分:3)

非法调用来自jQuery尝试序列化FormData对象,当指定FormData对象作为jQuery.ajax的数据参数时,必须通过将字段processData设置为false来告诉jQuery不要处理数据。 此外,jQuery将使用FormData设置您不需要的内容类型,并防止此设置的contentType为false。

{{1}}