我有一个切换按钮,可以更改状态(显示/隐藏)。 我在 ajax 中发送正确的数据并尝试 consol 并且它显示正确的数据但是在控制器中,请求是空的。我已经添加了 CSRF 令牌,这不是令牌问题。我不知道为什么? 这是我的完整代码:
$status_btn = '<div class="form-check form-switch ps-0 bg-primary ms-auto my-auto">
<input class="form-check-input ms-auto mt-1' . ($firmware->status == 1 ? ' bg-primary ' : '') . '" type="checkbox" data-id="' . $firmware->id . '" id="status_update" ' . ($firmware->status == 1 ? "checked" : "") . '>
</div>';
这是我的 Jquery AJAX 代码:
$(document).on('click', '#status_update', function(e) {
if ($(this).prop('checked')) {
$(this).addClass('bg-primary border-2');
} else {
$(this).removeClass('bg-primary');
}
var data = {
id: $(this).data('id'),
status: $(this).prop('checked') == true ? 1 : 0,
};
var url = "{{ route('changeFirmwareStatus') }}";
$.ajax({
type: "POST",
url: url,
data: data,
dataType: "json",
processData: false,
contentType: false,
success: function(response) {
toastr.options = {
"closeButton": true,
"progressBar": true,
"showDuration": 300,
"timeOut": 2000,
"hideDuration": 1000,
// "preventDuplicates": true,
}
toastr[response.state](response.message);
}
});
});
这是我的控制器路线:
Route::post('/changeFirmwareStatus', [FirmwareController::class, 'changeFirmwareStatus'])->name('changeFirmwareStatus');
这是我的控制器代码:
public function changeFirmwareStatus(Request $request)
{
dd($request->all());
$firmware = Firmware::findOrFail($request->id);
$firmware->update(['status' => $request->status]);
if ($firmware == true) {
return $this->JsonResponse(200, 'success', 'Firmware Status Successfully Changed !');
} else {
return $this->JsonResponse(422, 'error', 'Something Went Wrong !');
}
}
看看并指导我,(我不想要 GET 方法和查询字符串)。提前致谢
你的问题是你的ajax代码中的这两行
processData: false,
contentType: false,
这些通常在使用
FormData
时添加。但是您当前正在发送 json 数据。所以你可以删除这两行,它应该可以工作。干杯