我有一个视图页面,它传递了所有活动警报。在每个显示的行上,我有一个显示按钮,以便您可以看到单独的警报
{% 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部分。它调用的data-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,但在某些时候这会改变。
由于
答案 0 :(得分:0)
您不应在模板中声明重复的ID,例如id =“show”,更好地使用class
或声明您的ID id="show_1 ... n"