0

使用流明,我正在显示“门票”。这是我的Tickets.blade.php

@foreach($tickets as $ticket)
<div>
    <p>{{ $ticket->id }}</p>
    <p>{{ $ticket->content }}</p>
    <button onclick="deleteTicket({{$ticket->id}})">Delete</button>
</div>
@endforeach

所以本质上,每次有人点击删除时,它都会触发这个脚本:

<script>
    function deleteTicket(id) {
        jQuery.ajax({
            type: "post",
            url: "/tickets/deleteTicket",
            data: id,
            dataType: "text",
            success: function () {
                console.log('deleted!');
            }
        });

    }
</script>

在我的routes.php,我有这个:

$app->post('tickets/deleteTicket','TicketsController@deleteTicket');

最后,在 my 中TicketsController.php,我有:

public function deleteTicket($id) {
    $ticket = Ticket::find($id);
    $ticket->delete();

    return redirect('/tickets');
}

按下按钮(控制台)时遇到的问题:

发布 http://example.com/tickets/deleteTicket 404 (未找到)

我不明白我做错了什么,以及为什么找不到该方法。任何人都可以帮忙吗?

编辑-我已将其更改routes.php为:

$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');

我的脚本看起来一样,但我将“类型”更改为get而不是post.

如果我访问,这个站点:http://mysite/tickets/deleteTicket/1,票将被删除,并重定向到tickets页面。但是如果单击该按钮,则会发生此错误:

http://MYSITE/tickets/deleteTicket?id=3 404(未找到)

在这一点上,我想我只需要修改我的 AJAX 调用到正确的 URL,但我想确保安全是一个问题。

4

2 回答 2

2

或者你可以试试这个:

路由.php

$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');

好的,这是您的刀片:向按钮添加类并在单击时删除该功能。像这个 :

<button class="delete" data-id="{{$ticket->id}}>Delete</button>

你的脚本:

$(".delete").on("click", function(e) {
     e.preventDefault();
    var id = $(this).data('id');
    $.ajax({ 
       url : "tickets/deleteTicket/"+id+"",
       type : "get" or "post",
      success: function(data) {
          alert(data);    
       }
    });
});
于 2016-08-19T05:55:48.437 回答
0

你必须改变的东西太多
- 在 JS中

url: "/tickets/deleteTicket", // Try change to your full URL with http://
data: id, // Change to data: "id="+id,

- 在控制器中

public function deleteTicket(Request $request) {
    $ticket = Ticket::find($request->id);
    $ticket->delete();

    return redirect('/tickets');
}
于 2016-08-19T06:28:24.510 回答