2017-02-09 252 views
0

我有这样的模板:Ajax请求没有返回

<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 

的梅索德

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 } 

我现在登录,但我没有得到一个retourn在ajax请求之后。

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

+0

什么是响应代码?尝试注释除了最后一个行动中的行动中的所有行,并检查响应代码是否为200 –

+0

同样的问题....回应是200 – user7424312

+0

你试过了返回JsonResponse()吗? – panche14

回答

0

我认为你必须:

use Symfony\Component\HttpFoundation\JsonResponse; 

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

清除缓存以确保万无一失。

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

+0

不工作...同样的问题 – user7424312

+0

你是否看到过网络中的symfony错误页面标签???这是一个500错误? 你必须看看这个错误页面,否则你不会轻易找到你的错误... – Constantin

+0

我如何调试这个错误?当请求发出ajax请求时,请帮助我 – user7424312

1

你错过了return false你的处理程序中两个可能的地方之一。 做这一点:

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

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

如果你去的第二个解决办法 - 你需要在你的changeNumber函数的末尾添加return false;

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

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

WebDeveloper工具的提示:它也可能有助于在页面提交和刷新之间启用不清除控制台和网络选项卡。

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

我建议你修改HREF链接,您的href =“”, 当你在此页上单击将再次刷新。即使你离开阿贾克斯。因为刷新页面,你也看不出来。你可以改为 Href =“javascript :;”在其他地方,然后你按照正常的思维方式来写。