laravel 4 paginate get function return json
Если есть контроллер с этой функцией индекса:
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 ответ
Есть несколько вещей не так с этим подходом.
- Вы делаете запрос GET, чтобы сделать лайк. Я рекомендую пойти узнать о принципах REST.
- Вы делаете ajax-вызов JS в PHP, чтобы установить cookie. Я не гуру JS, но вы можете хранить ваши лайки в LocalStorage или устанавливать cookie прямо из JS. Нет необходимости создавать конечную точку PHP для той же функциональности.
- Если вы пишете PHP, используйте это:
return Response::json($data)->withCookie($cookie)
,
Больше информации о Cookies в Laravel здесь: http://laravel.com/docs/requests