Laravel Delete按钮无法使用Ajax调用

时间:2018-01-16 06:37:31

标签: javascript php jquery ajax laravel

我有一个Laravel帖子应用程序,我在其中创建和显示帖子。我现在正在尝试使用Ajax调用删除帖子。我们说我有10个帖子显示。当我点击第一篇文章的删除按钮时,出现405 Method Not Allowed错误。当我点击下面任何帖子上的删除按钮时,绝对没有任何反应,没有错误或警告消息。请注意我的CSRF令牌已设置并正常运行。任何帮助或建议将不胜感激。

这是HTML:

    @foreach($posts as $post)
    <div class="postContainer" id="post{{ $post->id }}">
      <h4 class="postHeading" id="showtitle">{{ $post->title }}</h4>
      <p class="post" id="postBody">{{ $post->post }}</p>
      <span class="authorName" id="showauthor">{{ $post->author }}</span>
      <span class="postDate" id="showpostDate">{{ $post->created_at }}</span>
      <input type="submit" name="delete" id="delete" value="Delete" data-id="{{ $post->id }}">
    </div>
    @endforeach
    <div class="message" id="message">

    </div>

这是我的Ajax调用:

    $("#delete").on("click", function(){

      var id = $(this).attr('data-id');

      $.ajaxSetup({
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr("content")
        }
      });

      $.ajax({
        url: '/index/delete/' + id,
        type: "POST",
        data: {_method: 'delete'},
        success:function(response){
          $("#message").append("<div>" + response.message + "</div>");
        },
      });

    });

这是我的路线:

   Route::post('/index/delete/{id}', 'HomeController@delete');

这是我的控制器:

public function delete($id){
  Post::find($id)->delete();
  return redirect('/');
}

2 个答案:

答案 0 :(得分:2)

在您的代码中更改此内容

id to class

<input type="submit" name="delete" class="delete" value="Delete" data-id="{{ $post->id }}">
脚本

致电类(。)而非 ID(#)

数据('id')不是 attr('data-id')

$(".delete").on("click", function(){
    var id = $(this).data('id');

答案 1 :(得分:2)

抱歉,我没有评论的声誉,所以我将此作为答案发布。 是的,你必须改变你的javascript,因为ID是唯一的,你只能将它给一个输入并通过它调用一个输入。 在你的routes / web.php我会这样做 Route::post('/index/delete/{post}', 'HomeController@delete')->name('posts_delete');名称对于命名路由是可选的,但它通常有帮助(使用命名路由,您可以为您的ajax中的url {{ route('posts_delete') }}执行但是您必须将id添加为数据 所以在你的HomeController中你可以做到

public function destroy(Post $post)
{
  $post->delete();
  return back();
} 

别忘了use App\Post;

另外我会推荐一个处理帖子的PostController php artisan make:controller PostsController --resource使用诸如destroy

之类的方法创建一个Controller