laravel 8 没有从 ajax 请求中获取数据
Posted
技术标签:
【中文标题】laravel 8 没有从 ajax 请求中获取数据【英文标题】:laravel 8 doesnt get data from ajax request 【发布时间】:2021-08-16 10:46:42 【问题描述】:我一直无法在服务器中获取多个复选框的值,每次我转储时总是给我 null。
但是我可以在控制台中获取这些值,但我希望它们位于服务器中,不幸的是我不知道该怎么做。我从这个网站、yotube 等尝试了很多方法,但我一直失败。我还在学习中,希望你能理解我的解释,非常感谢你抽出宝贵的时间来写这篇文章
这是表单代码
<form action="/kelompok-asistensi/asisten/$user->id/peserta" method="POST" id="formtambahpeserta">
@csrf
<div class="modal-body" id="modalLgContent">
<div class="d-flex">
<div class="asisten-pendamping">Asisten</div>
<div class="nama-asisten">$asisten->nama</div>
</div>
@if($peserta_all->count() > 0)
<div class="pilih">
Pilih peserta untuk ditambah ke kelompok ini
</div>
@endif
<div class="card">
<div class="alert alert-success collapse" role="alert" id="success-alerts">
<span class="success-text"></span>
</div>
@if($peserta_all->count() > 0)
<table class="table pilih-peserta" cellspacing="0" id="example">
<thead>
<tr>
<th class="col-1"></th>
<th class="col-2">No</th>
<th class="col-3">NPM</th>
<th class="col-4">Nama</th>
<th class="col-5">Angkatan</th>
</tr>
</thead>
<tbody>
@foreach($peserta_all as $data)
<tr>
<td><input type="checkbox" class="checkbox" name="check-box" id="chk" value=" $data->id "></td>
<td> $loop->iteration </td>
<td> $data->npm </td>
<td> $data->nama </td>
<td> $data->id_angkatan </td>
</tr>
@endforeach
</tbody>
</table>
@else
<div class="status">
<a>Tidak ada peserta untuk dapat ditambah</a>
</div>
@endif
</div>
<input name="id_asisten" type="hidden" class="form-control" id="id_asisten" autocomplete="off" value=" $user->id ">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal" style="color: rgb(71, 71, 71);">Close</button>
@if($peserta->count() > 0)
<button type="submit" class="btn btn-outline-primary" id="habc">Tambah</button>
@endif
</div>
</form>
这是javascript代码
$(document).ready( function ()
table = $('#example').DataTable(
"order": [[ 1, "asc" ]],
"pagingType": "numbers",
"pageLength": 15,
"info": false,
language:
searchPlaceholder: "cari",
search: "",
,
columnDefs: [
"targets": 0, "sortable":false ,
"targets": 1 ,
"targets": 2, "sortable":false ,
"targets": 3, "sortable":false ,
"targets": 4
]
);
$("#formtambahpeserta").on('submit', function(e)
let checkbox_terpilih = $('#example tbody .checkbox:checked');
let semua_npm = [];
$.each(checkbox_terpilih, function(i, elm)
semua_npm.push(elm.value);
);
console.log(semua_npm);
$.ajax(
url:$(this).attr('action'),
method:'post',
dataType: 'json',
data: npm:semua_npm,
contentType:"application/json; charset=utf-8",
success:function(res)
table.ajax.reload(null, false);
$("#modaltambahpeserta").modal('hide');
);
); );
这是控制器
public function peserta_tambah(Request $request, User $user)
dd($request->npm);
Peserta::where('id_asisten', $user->id)->whereIn('id', $request->npm)->update(['id_asisten' => $user->id]);
return response()->json(true);
编辑:
这是路线
Route::post('/kelompok-asistensi/asisten/user:id/peserta', [KelompokController::class, 'peserta_tambah']);
这是我从 dd($request->all()); 得到的。
所以我检查了多个复选框并且只有一个数据,而且ajax中似乎没有数组,因为它在请求中看不到
这是在 ajax 调用之前警告“semua_npm”变量,它是一个数组
网络标签
【问题讨论】:
尝试使用Log::info($request->npm);
而不是转储,因为您使用的是 ajax 请求。
它给了我这样的错误 TypeError Illuminate\Database\Query\Builder::cleanBindings(): Argument #1 ($bindings) must be of type array, null given, called in \vendor\laravel \framework\src\Illuminate\Database\Query\Builder.php 在第 962 行
【参考方案1】:
您需要从 ajax 中删除 contentType:"application/json; charset=utf-8"
。所以它使用默认内容类型。
如果你没有在 ajax 中全局设置 csrf 令牌
$.ajax(
url:$(this).attr('action'),
method:'post',
data: npm:semua_npm, _token: @json(csrf_token()),
success:function(res)
);
然后在你的服务器端你可以像这样访问
$request['npm']
更新
$("#formtambahpeserta").on('submit', function(e)
e.preventDefault();
let checkbox_terpilih = $('#example tbody .checkbox:checked');
let semua_npm = [];
$.each(checkbox_terpilih, function(i, elm)
semua_npm.push(elm.value);
);
console.log(semua_npm);
$.ajax(
url:$(this).attr('action'),
method:'post',
data: npm:semua_npm, _token: @json(csrf_token()),
success:function(res)
table.ajax.reload(null, false);
$("#modaltambahpeserta").modal('hide');
);
); );
你的控制器方法应该是
public function peserta_tambah(Request $request, User $user)
Peserta::where('id_asisten', $user->id)->whereIn('id', $request['npm'])->update(['id_asisten' => $user->id]);
return response()->json(true);
【讨论】:
不幸的是它仍然给我 null console.log(semua_npm) .检查你得到了什么 如果你在 console.log 中得到了值然后检查 dd($request->all()) 是的,我编辑了帖子,你可以看到我的路线,console.log(semua_npm) 给了我一个数组,我希望它在服务器中,但是 dd($request->all ()) 给出 null,不知道为什么 @MikkelNurfalah.i 会调查的。给我一些时间以上是关于laravel 8 没有从 ajax 请求中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 将 VerifyCsrfToken 添加到控制器获取 ajax 请求
Laravel Ajax没有从表单获取值到Controller