繁体   English   中英

Ajax get无法正常工作-内部服务器错误

[英]Ajax get is not working - Internal Server Error

我有一个主页,上面有一个带有某些类别的菜单,下面是最新的10个帖子。

一个帖子可以有多个类别,一个类别可以属于许多帖子,因此有2个模型和一个带有2列的数据透视表“ category_post”:id和name。

因此,在主页中,在帖子下方有一个带有一些类别的菜单:

 <ul class="Categories__Menu"> 
    @foreach($categories->take(6) as $category)
        <li class="ative">
            <a href="" name="category" id="{{$category->id}}">{{$category->name}}</a>
        </li>
    @endforeach
</ul>

<div class="row" id="posts">
 @foreach($posts as $post)
<div class="col-12 col-sm-6 col-lg-4 col-xl-3 mb-4">
    <div class="card">
        <img class="card-img-top" src="{{$post->image}}" alt="Card image cap">
        <h5 class="card-title">{{$post->name}}</h5>
        <div class="card-footer d-flex justify-content-between align-items-center">
            <a href="{{route('posts.show', ['id' => $post->id, 'slug' => $post->slug])}}" class="btn btn-primary text-white">More</a>
        </div>
    </div>
</div>
@endforeach
</div>

我希望当单击每个类别以仅在首页中显示该类别的帖子,而在同一首页中而不是特定类别页面中显示该帖子。 因此,也许最好的方法是使用AJAX。

但是我访问“ http://proj.test/posts/where/category/5 ”时出错

ReflectionException (-1)
Class PostController does not exist

或者,当我单击菜单中的类别时,它会出现在控制台中:

GET http://proj.test/posts/where/category/5 500 (Internal Server Error)

您知道问题出在哪里吗?

编码:

在FrontController中,我已经将类别和帖子传递到了主页视图:

FrontController:

class FrontController extends Controller
public function index(){
        return view('home')
            ->with('categories', Category::orderBy('created_at', 'desc')->get())
    ->with('posts', Post::orderBy('created_at','desc')->take(10)->get());

    }
  }

职位和类别模型:

class Post extends Model
{
    public function categories(){
        return $this->belongsToMany('App\Category');
    }
 }
 class Category extends Model
{
    public function posts(){
        return $this->belongsToMany('App\Post');
    }
}

PostController:

public function WhereHasCategory(Request $request)
    {
        $posts = Post::whereHas('categories', function ($categories) use (&$request) {
            $categories->where('id',$request->id);
        })->get();

        return response()->json($posts);
    }

转到首页:

Route::get('/', [
    'uses' => 'FrontController@index',
    'as'   =>'index'
]);

路由到ajax部分:

Route::get('posts/where/category/{id}','\PostController@WhereHasCategory')->name('category.posts');

阿贾克斯:

$(function() {
    $("a[name='category']").on('click', function(){
        var category_id = $(this).attr("id");
        $.ajax({
            url: '{{ route('category.posts',null) }}/' + category_id,
            type: 'GET',
            success:function(result){

                $('#posts').empty();
                $.each(result,function(index, postObj){
                    $('#posts').append("<p>"+postObj.title+"</p>");
                });
                console.log(result);
            },
            error: function(error) {
                console.log(error.status)
            }
        });

    });
});

您在ajax路由中定义了错误的类。

Route::get(
    'posts/where/category/{id}',
    '\PostController@WhereHasCategory'
)->name('category.posts');

你已经把控制器\\PostController ,当我想象它的App\\Http\\Controllers\\PostController 当您在类的前面加上\\它告诉它在全局范围内,没有名称空间。 删除\\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM