如果有具有此索引功能的控制器:
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()函数运行得很好!(im使用ajax来收集数据),但当第2页重新加载时(im使用无限滚动),getLike函数返回带有json文本的空白页。帮助
这种方法有几个问题。
- 你做了一个GET请求来点赞。我建议去学习REST原理
- 您对PHP进行JS-ajax调用以设置cookie。我不是JS大师,但你可以将你的赞存储在LocalStorage中,也可以从JS中设置cookie。无需为相同的功能创建PHP端点
- 如果您确实编写了PHP,请使用以下代码:
return Response::json($data)->withCookie($cookie)
有关Laravel Cookies的更多信息,请点击此处:http://laravel.com/docs/requests#cookies