使用AJAX从

时间:2017-08-15 09:18:35

标签: jquery ajax symfony symfony-routing

我有一个简单的showAction来显示用户的信息:

/**
 * @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模板显示所选用户:

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

目前正在发生的事情是,当我加载页面时,{{ dump(user) }}包含所有用户的数组,并且不为空。当我点击“显示”按钮以显示一个用户的信息时,{{ dump(user)}}确实会更改以显示正确的信息。

当我将{{ dump(user) }}更改为{{ user.name }} - {{ user.age }}并重新加载页面时,我收到错误:

  

Key&#34; name&#34;对于带有键的数组&#34; 0,1和#34;在...中不存在   第2行的user / showUser.html.twig

有人能帮助我吗?向我解释我做错了什么?我认为我的ajax调用也有问题,我之前从未使用过ajax,而且我根据我设法找到的样本创建了这个,但除此之外我还没有。

我想要的是在点击用户的显示按钮时在div中显示用户的信息。

1 个答案:

答案 0 :(得分:0)

我想我明白了:

我改变了我的ajax功能:

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

我删除了twig include(也是Peter Popelyskho在评论中所说的)并将showUser.html中的div粘贴到其位置:

<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 }}

它看起来不错!

如果有人认为有更好的方式或更方便的方式,请随时告诉我,我想尽可能好地学习。