我有一个视图页面,它传递了我所有的活动警报。在显示的每一行上,我都有一个显示按钮,这样你就可以看到单独的警报
{% for alert in alerts %}
<tr>
<td>{{ alert[0].id }}</td>
<td>{{ alert[0].alertStatus }}</td>
<td>
<input type="button" value="Show" data-url="{{ path('NickAlertBundle_show', {id: alert[0].id}) }}" onclick="show_alert( {{ alert[0].id }} )" id="show"/>
</td>
</tr>
{% endfor %}
因此,当单击该按钮时,会调用javascript函数show_alert。
function show_alert(id){
alert(id);
$.ajax({
type: "POST",
url: $("#show").attr('data-url'),
data: {id: id},
success: function(data) {
if(data){
}else{
alert("Unknown Error!");
}
},
error:function(){
alert(id);
}
});
}
现在,我在该函数的顶部执行一个警报,该警报总是显示正确的id。我认为问题出在ajax调用的url部分。它调用的数据url应该是正确的。这就是所谓的
NickAlertBundle_show:
pattern: /show-alert/{id}
defaults: { _controller: NickAlertBundle:Alert:show }
requirements:
_method: GET|POST
id: 'd+
因此,这应该调用控制器动作
public function showAction(Request $request, $id)
{
var_dump($id);
if($request->isXmlHttpRequest())
{
$id = (int)$request->request->get('id');
}
return new JsonResponse('test');
}
不过,此时,此操作中的var_dump始终输出上次添加的警报的id,而不是所选警报的id。当我显示警报时,它总是显示最新添加的警报。
那么,是什么导致它获得最新的警报id而不是所选的id呢?正如我所说,它最初会得到正确的id,但在某个时候会发生变化。
感谢
您不应该声明重复的id,如模板中的id="show",最好使用class
或像id="show_1 ... n"
一样声明您的id