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 ответ

Есть несколько вещей не так с этим подходом.

  1. Вы делаете запрос GET, чтобы сделать лайк. Я рекомендую пойти узнать о принципах REST.
  2. Вы делаете ajax-вызов JS в PHP, чтобы установить cookie. Я не гуру JS, но вы можете хранить ваши лайки в LocalStorage или устанавливать cookie прямо из JS. Нет необходимости создавать конечную точку PHP для той же функциональности.
  3. Если вы пишете PHP, используйте это: return Response::json($data)->withCookie($cookie),

Больше информации о Cookies в Laravel здесь: http://laravel.com/docs/requests

Другие вопросы по тегам