我有一个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('/');
}
答案 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