2016-11-22 16 views
2

Ajaxで新しくなりました。その目的は、記事とは異なり、1人のユーザーが好きなものです。私のコードを見て:ajaxリクエスト後に表示されるデータをリフレッシュするsymfony

コントローラ

public function likeAction(Request $request, Article $article, $slug) 
{ 
    if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) { 
     throw $this->createAccessDeniedException(); 
    } 

    if ($request->isXmlHttpRequest()) { 
     $tokenStorage = $this->get('security.token_storage'); 
     $currentUser = $tokenStorage->getToken()->getUser(); 
     $likes = $article->getLikes(); 
     foreach ($likes->getUsers() as $user) { 
      if ($user == $currentUser) { 
       throw new \Exception('Vous aimez déjà cet article !'); 
      } 
     } 
     $likes->addUser($currentUser); 
     $likes->setCount($likes->getCount() + 1); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($article); 
     $em->flush(); 

     $count = $article->getLikes()->getCount(); 
     return new JsonResponse(array('data' => $count)); 
    } 
    return $this->redirectToRoute('pm_platform_view', array('slug' => $slug)); 
} 

ルート

pm_platform_like: 
    path:  /like/{slug} 
    defaults: 
     _controller: PMPlatformBundle:Article:like 

ビュー

<a class="btn btn-blue-grey" id="like" role="button"></a> 
<span class="counter" id="counter">{{ article.likes.count }}</span> 

    <script> 
     $(document).ready(function() { 
      $(document).on('click', '#like', function (e) { 
       $this = $(this); 
       $.ajax({ 
        type: 'GET', 
        url: '{{ path('pm_platform_like', {slug: article.slug}) }}', 
        dataType: 'JSON', 
        data: {}, 
        success: function() { 
         //refresh article.count here 
        } 
       }); 
      }); 
     }); 
    </script> 

は現在、Ajaxのリクエストが動作し、データベースに永続化されている "のように"。しかし、私の考えでは何も変わらず、データを "リフレッシュ"する必要があります.Ajaxリクエストが成功した後は、記事エンティティのcount属性に似ています。私はそれに助けが必要です。

+0

あなたは、AJAX成功条件のカウントのように取得するための関数を呼び出すことができます。 –

+0

私は理解していない、あなたは例を書くことができますか? –

答えて

1

お客様のAJAXリクエストは、既に返信件数に達しています。だから、あなたは "カウンター" divを合計のようなカウントで更新する必要があります。

objResponseの応答はajaxであり、合計の数はobjResponse.dataに格納されます。

success: function(objResponse) { // "objResponse" is response os ajax request 
    $("#counter").html(objResponse.data); 
    ^^ 
} 

完全なコード

<a class="btn btn-blue-grey" id="like" role="button"></a> 
<span class="counter" id="counter">{{ article.likes.count }}</span> 

<script> 
    $(document).ready(function() { 
     $(document).on('click', '#like', function (e) { 
      $this = $(this); 
      $.ajax({ 
       type: 'GET', 
       url: '{{ path('pm_platform_like', {slug: article.slug}) }}', 
       dataType: 'JSON', 
       data: {}, 
       success: function(objResponse) { // "objResponse" is response os ajax request 
        //refresh article.countcounter here 
        $("#counter").html(objResponse.data); 
        ^^ 
       } 
      }); 
     }); 
    }); 
</script> 

Read more about ajax

+0

ありがとう、ありがとう! –

2

countと同じような別のAjaxリクエストがあるとします。

success: function(response) { 
     //Recall function here that gets like count. 
     fnGetLikeCount(); 
    } 

編集:

あなたは、カウントのようになり、その関数/ AJAXリクエストを投稿することができますか?

編集2:

はいあなたは、コントローラからの応答を送信することができ、および/ lable/divのか、これまでに何を使っているようでカウントセットを割り当てることができます。

+0

私はこのajaxリクエストを持っていません。 Json応答(コントローラー内)で同様のカウントを返すことは可能だと思いますか? –

+0

編集された回答を参照してください、あなたはコントローラからの応答を送ることができます。 –

関連する問題