2017-08-15 37 views
1

我有一個簡單的showAction向用戶展示的信息:獲得從Symfony的控制器操作數據與AJAX

/** 
* @Route("/user/{id}", name="show_user", options={"expose"=true}) 
* @Method("GET") 
* 
* @param User $user 
* @return \Symfony\Component\HttpFoundation\Response 
*/ 
public function showAction(User $user) 
{ 
    return $this->render('user/showUser.html.twig', array(
     'user' => $user, 
    )); 
} 

我試圖讓與AJAX的信息在一個單獨的div來顯示它:

$('.showUser').click(function (e) { 

    var getUrl = Routing.generate('show_user', {'id': $(this).attr('id')}); 
    e.preventDefault(); 

    $.ajax({ 
     url: getUrl, 
     success: function (data) { 
      $("#userdetails").html(data); 
     } 
    }); 
}); 

我在HTML用戶概述清單:

<table class="table-title table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th class="col-md-2">Name</th> 
     <th class="col-md-1">Age</th> 
     <th class="col-md-1">Actions</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     {% for user in users %} 
     <td>{{ user.name }}</td> 
     <td>{{ user.age }}</td> 
     <td> 
      <button id="{{ user.id }}" type="button" class="deleteUser btn btn-lg btn-danger">Delete</button> 
      <button id="{{ user.id }}" type="button" class="showUser btn btn-lg btn-primary">Show</button> 
     </td> 
    </tr> 
    {% endfor %} 
    </tbody> 
</table> 
<div class="displayUser col-sm-4"> 
    {% include 'user/showUser.html.twig' %} 
</div> 

而且我showUser模板顯示選擇的U SER:

<div id="userdetails"> 
    {{ dump(user) }} 
</div> 

什麼目前正在發生的事情是,當我加載頁面時,{{ dump(user) }}包含所有用戶的數組,而不是空的。當我然後點擊顯示按鈕,顯示一個用戶的信息{{ dump(user)}}不會改變,以顯示正確的信息。

而且當我改變{{ dump(user) }}{{ user.name }} - {{ user.age }},並重新加載頁面出現錯誤:

Key "name" for array with keys "0, 1" does not exist in user/showUser.html.twig at line 2

有人可以幫助我嗎?向我解釋我做錯了什麼?我覺得還有什麼問題我的AJAX調用,我從來沒有使用過阿賈克斯,我創造了這個基礎上我設法找到,但比這再我沒有得到樣品。

我要的是用戶的顯示按鈕點擊時一個div來顯示用戶的信息。

+0

可能是你並不需要包含'{%包括「用戶/ showUser.html.twig」%}'因爲你加載通過AJAX的細節 –

回答

0

我想我想通了:

我改變了我的AJAX功能:

$('.showUser').click(function() { 
    var getUrl = Routing.generate('show_user', {'id': $(this).attr('id')}); 
    $.get(getUrl, function (data) { 
      $(".userdetails").html(data); 
    }); 
}); 

我刪除了樹枝包括(亦是彼得Popelyskho在評論中說的),並粘貼在股利在其位showUser.html:

<table class="table-title table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th class="col-md-2">Name</th> 
     <th class="col-md-1">Age</th> 
     <th class="col-md-1">Actions</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     {% for user in users %} 
     <td>{{ user.name }}</td> 
     <td>{{ user.age }}</td> 
     <td> 
      <button id="{{ user.id }}" type="button" class="deleteUser btn btn-lg btn-danger">Delete</button> 
      <button id="{{ user.id }}" type="button" class="showUser btn btn-lg btn-primary">Show</button> 
     </td> 
    </tr> 
    {% endfor %} 
    </tbody> 
</table> 
<div class="userdetails"></div> 

裏面我user/showUser.html.twig模板,我有:{{ user.name}} - {{ user.age }}

看起來很不錯!

如果有人認爲有更好的方法或更方便的方式,請隨時告訴我,我要學習儘可能好。

相關問題