Php Laravel 5.5通过单击ajax调用删除项目
我试图在单击图标时通过ajax调用删除模型项。 没有ajax调用,只需一个表单,一切都很好 当我查看chrome开发工具的“网络”选项卡时,会引发此异常 “Symfony\Component\HttpKernel\Exception\HttpException” 这是我的图标:Php Laravel 5.5通过单击ajax调用删除项目,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我试图在单击图标时通过ajax调用删除模型项。 没有ajax调用,只需一个表单,一切都很好 当我查看chrome开发工具的“网络”选项卡时,会引发此异常 “Symfony\Component\HttpKernel\Exception\HttpException” 这是我的图标: <i class="fa fa-trash-o deletebtn" aria-hidden="true" data-pointid="<?php echo $damagePoint->id ?>
<i class="fa fa-trash-o deletebtn" aria-hidden="true" data-pointid="<?php echo $damagePoint->id ?>"></i>
我的路线:
Route::delete('pointdelete/{id}', 'DamagePointController@delete');
我的控制器方法
public function delete($id)
{
$todo = DamagePoint::findOrFail($id);
$todo->delete();
return back();
}
如果您使用的是类似于post的删除路线。这是示例代码。您可以根据需要进行更改
$(".deletebtn").click(function(ev){
let pointid = $(this).attr("data-pointid");
$.ajax({
type: 'DELETE',
url: '/pointdelete',
dataType: 'json',
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
data: {id:pointid,"_token": "{{ csrf_token() }}"},
success: function (data) {
alert('success');
},
error: function (data) {
alert(data);
}
});
});
路线
控制器
public function delete(Request $request){
if(isset($request->id)){
$todo = DamagePoint::findOrFail($request->id);
$todo->delete();
return 'success';
}
}
试试这种ajax调用
$(".deletebtn").click(function(ev){
let pointid = $(this).attr("data-pointid");
$.ajax({
url: '/pointdelete/' + pointid,
data : {'_method':'delete','_token':'your csrf token'},
//type: 'delete',
type:'post',
success: function (response) {
}
});
})
另外,在chrome开发者工具中验证请求头信息中调用的URL。
您不需要表单,只需在ajax中将您的令牌设置为
{{{csrf_token()}}
。请检查以下代码:
Route::delete('pointdelete',['as' => 'point.delete','uses' => 'DamagePointController@delete']);
<button class="fa fa-trash-o deletebtn" aria-hidden="true" onclick="delete({{ $damagePoint->id }}"></button>
<script type="text/javascript">
function delete(id){
var _token = "{{ csrf_token() }}";
$.ajax({
url : "{{URL::route('your-delete-route')}}",
type : 'delete',
dataType : 'json',
data : {
'id': id,
'_token':_token
},
beforeSend : function() {
},
complete : function() {
},
success : function(resp)
{
console.log(resp);
}
});
}
</script>
public function delete(Request $request,$id)
{
DamagePoint::destroy($id);
return response()->json(['success' => true],200);
}
Route::delete('pointdelete',['as'=>'point.delete','uses'=>'DamagePointController@delete']);
函数删除(id){
var_-token=“{{csrf_-token()}}”;
$.ajax({
url:“{url::route('your-delete-route')}}”,
键入:“删除”,
数据类型:“json”,
数据:{
“id”:id,
“\u令牌”:\u令牌
},
beforeSend:function(){
},
完成:函数(){
},
成功:功能(resp)
{
控制台日志(resp);
}
});
}
公共函数删除(请求$Request,$id)
{
损坏点::销毁($id);
return response()->json(['success'=>true],200);
}
最近我遇到了同样的错误,在laravel 5.7中,上述解决方案都不适用于我
我的代码是这样的-
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type:'POST',
async: false,
url:validUrl,
data:{id:1},
success:function(response){
if(response && response.error) {
//show error
} else {
// success
}
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type:'POST',
async: false,
url:validUrl,
data:{id:1},
success:function(response){
if(response && response.error) {
//show error
} else {
// success
}
}
});
然后我必须首先使用设置方法设置csrf令牌-更改的代码类似于-
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type:'POST',
async: false,
url:validUrl,
data:{id:1},
success:function(response){
if(response && response.error) {
//show error
} else {
// success
}
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type:'POST',
async: false,
url:validUrl,
data:{id:1},
success:function(response){
if(response && response.error) {
//show error
} else {
// success
}
}
});
所以我需要使用带有post方法的表单?你知道如何从我的页面中删除该项吗?此时,我需要手动刷新我的页面,以查看删除的项目是否消失,在一个梦幻场景中,我希望看到项目被删除。Side ajax success ajax您可以使用位置重定向或特定潜水,您可以刷新。我的目标实际上是不刷新页面。您可以从chrome developer tool共享请求标题的屏幕截图吗。?