1

テンプレートにコントローラーを埋め込みました。

{% render "AcmeUserBundle:User:showUsersList"} %}

<a onClick="changeStatus({{user.getUserId()}})"

目的は単純です:

  • ユーザーは、ajaxを介してステータスを更新するリンクをクリックします(これは正常に機能します)
  • ページ全体ではなく、組み込みコントローラーのみをリロードしてください。

現時点では、これを使用してページ全体をリロードすることで、これを行うことができました。document.location.reload(true);これまでのところ意味がありません...

これがajaxの部分です。

//...
function changeStatus(userId){
    $.ajax({
        type: "POST",
        url: ajaxControllerPath,
        data: "userId="+userId,
        success: function(){
            document.location.reload(true); 
        }
    });  
}

組み込みコントローラーのみをどのようにリロードしますか?

4

2 に答える 2

3

これは今のところ機能しています:

コントローラをdiv内に埋め込みます。

<div id="block1">
    <a onClick="changeStatus({{user.getUserId()}})"
</div>

そして、ajax呼び出しの最後にjavascriptを使用してコントローラーをリロードします

$('#block1').load("{{ path('show_users_list') }}");

誰かがより良い提案がありますか?

于 2012-08-18T07:07:35.210 に答える
2

ajaxコントローラーを呼び出すと、このコントローラーはshowUsersListテンプレートをレンダリングし、生成されたhtmlをjsonオブジェクトとして返すことができます。

$answer['html'] = $this->forward('AcmeUserBundle:User:showUsersList')->getContent(); 
$response = new Response();                                                
$response->headers->set('Content-type', 'application/json; charset=utf-8');
$response->setContent(json_encode($answer));
return $response

次に、JavaScriptで、この生成されたhtmlを使用して、ページのコントローラー部分のコンテンツを置き換えます(divなどを使用して識別します)

<div id="changethis">{% render "AcmeUserBundle:User:showUsersList"} %}</div>

function changeStatus(userId){
    $.ajax({
        type: "POST",
        url: ajaxControllerPath,
        data: "userId="+userId,
        success: function(returnData){
            $('#changethis').html(returnData['html']);
        }
    });  
}
于 2012-08-18T07:59:07.170 に答える