【发布时间】:2022-06-12 08:57:20
【问题描述】:
我对 Laravel 和 ajax 比较陌生。
我正在尝试使用此 ajax 请求从表单的数据输入中更新数据库中的信息,我正在使用数据表。我可以很好地创建条目,当我单击编辑时,它会调出填充良好的模式,但是当我更改一些信息并单击更新时,它不会成功,因为我从来没有得到 console.log 并且我得到了 500 个内部服务器错误。
这是我的 Blade 文件中的 ajax 请求。
// UPDATE AJAX REQUEST
$("#edit_vehicle_form").submit(function(e){
e.preventDefault();
const fd = new FormData(this);
$("#edit_vehicle_btn").text('Updating...');
$.ajax({
url: '{{ route('update') }}',
method: 'POST',
data: fd,
cache: false,
processData: false,
contentType: false,
dataType: 'json',
success: function(res) {
console.log(res)
$("#edit_vehicle_btn").text('Update Vehicle');
$("#edit_vehicle_form")[0].reset();
$("#editVehicleModal").modal('hide');
fetchAllVehicles();
}
});
});
这是来自控制器的请求。
// UPDATE VEHICLE
public function update(Request $request)
{
$fileName = '';
$veh = Vehicle::find($request->id);
if ($request->hasFile('image')) {
$file = $request->file('image');
$fileName = time() . '.' . $file->getClientOriginalExtension();
$file->storeAs('public/images', $fileName);
if ($veh->image) {
Vehicle::destroy('public/images/' . $veh->image);
}
} else {
$fileName = $request->image;
}
$vehData = [
'make' => $request->make,
'model_name' => $request->model_name,
'version' => $request->version,
'powertrain' => $request->powertrain,
'trans' => $request->trans,
'fuel' => $request->make,
'model_year' => $request->model_year
];
dd($veh);
$veh->update($vehData);
return response()->json(
['status' => 200,]
);
}
可以看到信息是被浏览器在payload里面接收到的。
_token: TvpFRMBCUzXSJOksan8l3hLwgLyN3C3bttk3qliB
id: 1
image: 1652901564.png
make: BMW
model_name: 7 Series
version: M5
trans: Automatic
fuel: Petrol
powertrain: 540ti--e-xDrive
model_year: 2022
image: (binary)
并将数据处理成Json用于数据库条目。
array:7 [
"make" => "BMW"
"model_name" => "7 Series"
"version" => "M5"
"powertrain" => "540ti--e-xDrive"
"trans" => "Automatic"
"fuel" => "BMW"
"model_year" => "2022"
]
我想我已经找到了刀片文件中的 ajax,但经过进一步研究后,我陷入了停顿。
添加
#40 C:\\wamp-server\\www\\vehicle-db\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#41 C:\\wamp-server\\www\\vehicle-db\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#42 C:\\wamp-server\\www\\vehicle-db\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#43 C:\\wamp-server\\www\\vehicle-db\\public\\index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#44 C:\\wamp-server\\www\\vehicle-db\\server.php(21): require_once('C:\\\\wamp-server\\\\...')
#45 {main}
"}
我的 lavarel 日志的最后 4 行。
我的 PHP 日志或 Apache 日志中没有新的错误。
【问题讨论】:
-
您的
_token不在进入您的控制器的 json 中。这不能是问题吗?因为 laravel 不允许这样做。 -
我不确定是否需要重新解析所有信息。我将看看如何将令牌拉入并在之后回复。谢谢。
-
如果您在 PHP 中收到 500 错误,那么您的 Web 服务器日志中应该有一个堆栈跟踪。你能找出那是什么,然后把它放在你的问题中吗?