symfony中的Ajax请求没有返回

时间:2017-02-09 12:28:23

标签: php jquery ajax symfony

我有这个模板:

<div class="save-icon" style="margin-top: 2%">
   <a href="" onclick="changeNumber({{ number.getId }})">Link</a>
</div>

js:

{% block javascript %}
{{ parent() }}
<script type="text/javascript">
    function changeNumber(id){
        console.log(id);
        $.ajax({
            type: "POST",
            url: "{{path('numbers_update')}}",
            data: { id:id},
            success: function(msg){
                //alert( "Data Saved: " + msg );
            }
        });
    }
</script>
{% endblock %}

在页面的来源中我有:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<script type="text/javascript">
    function changeNumber(id){
        console.log(id);
        $.ajax({
            type: "POST",
            url: "/app_dev.php/admin/numbers/update",
            data: { id:id},
            success: function(msg){
                //alert( "Data Saved: " + msg );
            }
        });
    }
</script>

numbers_update路线的配置:

numbers_update:
path: /numbers/update
defaults: { _controller: ClientBundle:Admin/NumbersBlock:update }
requirements:
    _method:  POST

方法updateAction()

public function updateAction(Request $request){
    $i_id = $request->request->get('id');
    $em = $this->getDoctrine()->getManager();

    return $this->json(array());
}

我使用基本身份验证,因此我在security.yml中添加了此次调用:

access_control:
 - { path: ^/admin/homepage, roles: ROLE_ADMIN }
 - { path: ^/admin/numbers, roles: ROLE_ADMIN }
 - { path: ^/admin/numbers/update, roles: ROLE_ADMIN }

我现在已经登录了,但是在ajax请求后我没有撤回。

请帮帮我!我不明白可能是什么问题。你有什么想法吗? ...... Thx提前。

3 个答案:

答案 0 :(得分:1)

您在处理程序中的两个可能位置之一上缺少return false。 要么这样做:

 onclick="changeNumber({{ number.getId }}); return false;"

 onclick="return changeNumber({{ number.getId }});"

如果您使用第二个解决方案,则需要在return false;功能的末尾添加changeNumber

这里的问题是,当你点击这个<a>时,对你的处理程序的调用实际上是有效的,它可能会进行AJAX调用,但是你没有看到它。 由于您没有阻止a.click的默认行为,因此页面实际上遵循href中给出的链接(除了调用您的处理程序)并且您离开当前页面(或者可能再次转到同一页面) )。

无论您是转到不同页面还是同一页面,WebDeveloper工具很可能会刷新,您将看不到列出的AJAX调用。

WebDeveloper工具的提示:在页面提交和刷新之间也可以帮助清除控制台和网络选项卡。

答案 1 :(得分:0)

我认为你必须:

use Symfony\Component\HttpFoundation\JsonResponse;

return new JsonResponse(array('key' => 'value' ));
//instead of 
return $this->json(array());

清除缓存以确定。

在chrome中,您可以在开发人员工具的“网络”选项卡中找到有关错误的更多信息(当您使用ajax时)。

答案 2 :(得分:0)

<a href="" onclick="changeNumber({{ number.getId }})">Link</a>

我建议你修改href链接,你的href =&#34;&#34;, 当您单击此页面时将再次刷新。即使你离开了ajax。因为刷新页面,你也看起来不会出来。你可以改为 Href =&#34; javascript:;&#34;在其他地方,然后你按照正常的思维方式来写。