我有这个模板:
<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提前。
答案 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;在其他地方,然后你按照正常的思维方式来写。