这与先前的问题有关,但发生了一些奇怪的事情。
好的,我将视图页面传递给所有警报实体的数组,并在一个页面上显示所有警报。
{% for alert in alerts %}
<tr>
<td>{{ alert[0].id }}</td>
<td>{{ alert[0].alertStatus }}</td>
<td>
<input type="button" value="Delete" data-url="{{ path('NickAlertBundle_delete') }}" onclick="delete_alert( {{ alert[0].id }} )"/>
<input type="button" value="Show" data-forward="{{ path('NickAlertBundle_show', {id: alert[0].id}) }}" onclick="show_alert( {{ alert[0].id }} )" />
</td>
</tr>
{% endfor %}
这样可以毫无问题地工作。然而,您可以看到每个输出的警报,我给出一个删除按钮和一个显示按钮。删除按钮删除所选警报,并且显示按钮应在其自己的页面上显示所选警报。
现在,按下按钮时发生的第一件事是调用其javascript onclick函数。我的删除工作完美。我的show_alert似乎有问题。
所以这个show_alert看起来像是
function show_alert(id){
$.ajax({
type: "POST",
url: $(this).attr('data-forward'),
data: {id: id},
success: function(data) {
if(data){
}else{
alert("Unknown Error!");
}
},
error:function(){
alert("Failed");
}
});
}
我很确定问题与这一行有关
url: $(this).attr('data-forward')
那应该叫我的NickAlertBundle_show路线,
NickAlertBundle_show:
pattern: /show-alert/{id}
defaults: { _controller: NickAlertBundle:Alert:show }
requirements:
_method: GET|POST
id: \d+
反过来应该调用show动作
public function showAction(Request $request, $id)
{
if($request->isXmlHttpRequest())
{
$id = (int)$request->request->get('id');
}
$alert = $this->get('alert_bundle.manager.availability')->getSingleAvailability($id);
return $this->render('NickAlertBundle:Page:show.html.twig', array(
'alert' => $alert,
'id' => $id,
));
}
但是,当我点击“显示”按钮时,它似乎删除了我的警报(因此出于某种原因,它正在调用删除路由和操作)。
我的代码中是否有任何内容可以说明为什么会发生这种情况?
删除 的Javascript
function delete_alert(id){
var answer = confirm("Confirm delete");
if (answer){
$.ajax({
type: "POST",
url: $(this).attr('data-url'),
data: {id: id},
success: function(data) {
if(data){
var splitdata = data.split(":");
if(splitdata[0]=="Deleted"){
var id = splitdata[1];
alert("Your alert has been deleted");
location.reload();
}else{
alert(data);
}
}else{
alert("Unknown Error!");
}
},
error:function(){
alert("Please try again!");
}
});
}
}
控制器 public function deleteAction(Request $ request) { 如果($请求 - &GT; isXmlHttpRequest()) { $ id =(int)$ request-&gt; request-&gt; get('id'); }
$em = $this->getDoctrine()->getManager();
$alert = $em->getRepository('OntroAlertBundle:Alert')->find($id);
if (!$alert) {
throw $this->createNotFoundException('Alert entry was not found');
}
$alert->setIsDeleted(true);
$alert->setAlertStatus('Inactive');
$em->flush();
return new JsonResponse('Deleted');
}
路线
NickAlertBundle_delete:
pattern: /view-alerts
defaults: { _controller: NickAlertBundle:Alert:delete }
requirements:
_method: POST