在我的应用程序中,我需要上传一个菜的封面图片。
这是我的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() !!}
答案 0 :(得分:3)
非法调用来自jQuery尝试序列化FormData对象,当指定FormData对象作为jQuery.ajax的数据参数时,必须通过将字段processData设置为false来告诉jQuery不要处理数据。 此外,jQuery将使用FormData设置您不需要的内容类型,并防止此设置的contentType为false。
{{1}}