嘿伙计们'm using laravel 5.7 and I'我试图做一个ajax post请求来更新我的数据库 . ajax将根据更改功能的复选框发布 . 例如,如果我切换复选框,它将发送请求并将我的状态更新为 Inactive
表中的 Inactive
. 尝试之后,我的错误是 405 (Method Not Allowed)
. 谁能够记下我做错了什么?很抱歉,如果我的代码中有一些错误的代码或语法,因为我对Ajax很新 . 任何帮助,将不胜感激 .
Ajax
$(document).ready(function(){
$.ajax({
type:'get',
url:'{!!URL::to('findStatus')!!}',
success:function(data){
for(var i=0;i<data.length;i++){
var checkBox = document.getElementById('switch-'+data[i].u_id);
console.log(checkBox);
if(data[i].status == "Active"){
$('#switch-'+data[i].u_id).prop('checked',true);
}
else if(data[i].status == "Inactive")
{
$('#switch-'+data[i].u_id).prop('checked',false);
}
$('#switch-'+data[i].u_id).change(function(){
$.ajax({
type: "POST",
url : '{!!URL::to('admin/{admin}')!!}',
success:function(data){
console.log(data);
}
});
});
}
},
error:function(data){
console.log('ERROR');
}
});
});
Route
Route::resource('admin','AdminController'); << I'm using the update method from the resource controller
Controller
public function update(Request $request, $id)
{
$user = User::find($id);
if($user->status == "Active"){
$user->status = "Inactive";
$user->save();
}else{
$user->status = "Active";
$user->save();
}
return response()->json($user);
}
Form
{!!Form::open(array('action'=>['AdminController@update',$item->u_id],'method'=>'POST','id'=>'update'))!!}
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="u_id" id="u_id" value="{{$item->u_id}}">
<label class="custom-control custom-checkbox">
<input type="checkbox" id="switch-{{$item->u_id}}" class="custom-control-input">
<span class="custom-control-indicator"></span>
</label>
{{-- <button class="btn btn-primary">Update</button> --}}
{{Form::hidden('_method','PUT')}}
{!!Form::close()!!}
UPDATE
我已经设法"pass" u_id到我的帖子请求,通过 target.id
获取id并将其与 -
分开 . 它不是最优雅的方式,但它的工作原理 . 但现在我得到一个错误
POST http://manageme.test/admin/%7B2%7D 500(内部服务器错误)
这是我在我的代码中更新的内容 .
$('#switch-'+data[i].u_id).change(function(e){
console.log(e.target.id);
var s = e.target.id;
var split = s.split('-')[1];
$.ajax({
type: "POST",
url: `{!!url('admin/')!!}/{${split}}`,
data: { _token: "{{ csrf_token() }}", _method: "PUT" },
success:function(data){
console.log(data);
}
});
});
这些都在我的更新控制器中
public function update(Request $request, $id)
{
$user = User::find($id);
if($user->status == "Active"){
$user->status = "Inactive";
$user->save();
}else{
$user->status = "Active";
$user->save();
}
return response()->json($user);
}
我还查看了dev工具的网络选项卡中的错误,laravel的错误消息是 message: "Trying to get property 'status' of non-object"
. 我认为它无法在更新方法中找到任何 $user
2 回答
而不是:“{!! URL :: to('admin / ')!!}”写:
{!! url('admin /')!!} / $ {data [i] .u_id}
并将_token和_method参数添加到您的ajax数据中并像这样写:Solution
我设法解决了问题是来自试图传递用户的
u_id
并找到用户数据的路线 . 因此,我没有在内部输入url,而是创建了一个变量来将路径和u_id一起传递 . 这是代码Ajax
Update method
DONT 忘记将元标记添加到csrf标记的文档 Headers 中