laravel 4 paginate get function return json

时间:2014-04-10 11:38:24

标签: php json laravel laravel-4 paginate

如果控制器具有此索引功能:

public function getIndex() {
    return View::make('web.index')
        ->with('projects', Project::orderBy('id', 'DESC')->paginate(8));
}

在我看来有foreach循环

@foreach($projects as $project)
<a href="like/{{$project->id}}" class="action like {{$liked}}">
  {{$project->likes}}
</a>
@endforeach
<div class="pagination">
  {{$projects->links()}}
</div>

getLike函数:

public function getLike($id) {
    if(Cookie::get('like_'.$id) != 'true')
    {
        $project = Project::find($id);
        $project->increment('likes');
        $cookie = Cookie::forever('like_'.$id, 'true');
        $s = array(
            'status' => 'success'
        );

        $response = Response::json($s);
        $response->headers->setCookie($cookie);
        return $response;
    }
    $response = array(
        'status' => 'error'
    );
    return Response::json( $response );
}

Ajax请求:

$(".like").on("click", function(){
    $.get(
        $( this ).prop( 'href' ),
        {
        },
        function( data ) {

            if(data['status'] == 'error')
            {
                alert("Already Liked");
            }
            else {
                alert('Like');
            }
        },
        'json'
    );
    return false;
});

在第一页中,getLike()函数完美运行!(我使用ajax来收集数据),但是当第2页重新加载时(即使用无限滚动),getLike函数返回带有json文本的空白页。 帮助...

1 个答案:

答案 0 :(得分:0)

这种方法存在一些问题。

  1. 您执行GET请求以制作类似内容。我建议去了解REST原则。
  2. 您对PHP进行JS ajax调用以设置cookie。我不是JS大师,但您可以将您的喜欢存储在LocalStorage中,或者直接从JS设置cookie。无需为相同的功能创建PHP端点。
  3. 如果你编写PHP,请使用:return Response::json($data)->withCookie($cookie)
  4. 有关Laravel中Cookie的更多信息,请访问:http://laravel.com/docs/requests#cookies