Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.5通过单击ajax调用删除项目_Php_Jquery_Ajax_Laravel - Fatal编程技术网

Php Laravel 5.5通过单击ajax调用删除项目

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 ?>

我试图在单击图标时通过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>
我的路线:

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共享请求标题的屏幕截图吗。?