【发布时间】:2020-03-25 07:44:26
【问题描述】:
我正在尝试使用 Ajax 将产品添加到数据库而不刷新页面并将数据发送到数据库,但我在控制台上收到错误 Uncaught TypeError: Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.。如何在不刷新页面的情况下提交表单?
刀片
<form method="POST" role="form" enctype="multipart/form-data">
{{csrf_field()}}
<label for="pro_name">Name</label>
<input type="text" class="form-control" name="pro_name" id="pro_name" placeholder="Enter product name">
<label for="category_id">Choose Category</label>
<select name="category_name" id="category_name">
<option value=""> --Select Category -- </option>
@foreach ($categoryname_array as
$data)
<option value="{{ $data->name }}" >{{$data->name}}</option>
@endforeach
</select>
<label for="photos">Choose 5 Images</label>
<input "multiple="multiple" name="photos[]" type="file">
<button type="button" onclick = "submitThisForm({{Auth::user()->id}})" class="btn btn-primary">Submit</button>
</form>
阿贾克斯
<script>
function submitThisForm(id){
let url = "{{ route('product.store', ['id' => ':id']) }}".replace(':id', id);
$.ajax( {
url: url,
type: 'POST',
data: new FormData( this ),
processData: false,
contentType: false,
success: function(result){
console.log(result);
}
} );
e.preventDefault();
}
</script>
路线
Route::post('seller/product', 'ProductController@store')->name('product.store');
【问题讨论】:
-
您缺少
this的上下文。尝试获取表单,然后创建 FormData 对象var form = $('form')[0]; var formData = new FormData(form); -
是那一行,我在哪里把它放在 ajax 代码中?@porloscerrosΨ
-
我知道了
Uncaught ReferenceError: e is not defined@porloscerrosΨ -
嗯,这是另一回事。你的函数中有
e.preventDefault();,但是e is not defined。删除该行并在您的按钮标签onclick="event.preventDefault(); submitThisForm({{Auth::user()->id}});"上添加阻止 -
我试图删除
e.preventDefault();并将其添加到按钮中,但在控制台中我看到一个像<script> Sfdump = window.Sfdump || (function (doc) { var refStyle = doc.createElement('style'), rxEsc = /([.*+?^${}()|\[\]\/\\])/g, idRx = /\bsf-dump-\d+-ref[012]\w+\b/, keyHint = 0 <= navigator.platform.toUpperCase().这样的长脚本并且它没有提交表单 @porloscerrosΨ
标签: javascript php ajax laravel laravel-5