Yii 如何在视图文件的CViewList小部件中创建ajax删除链接

Yii 如何在视图文件的CViewList小部件中创建ajax删除链接,yii,Yii,CGridView小部件已经有了view、update、dete选项。但是我在基于jquery mobile的项目中使用了CListView小部件,但是在为delete选项创建ajax链接时遇到了问题。不知道如何在_view.php(视图文件)及其renderPartial()视图文件中创建一个ajax删除链接,以便在成功删除后将工具栏消失。请提前感谢plz帮助。这里是用于编辑和删除的_view.php文件链接 <?php echo CHtml::link(CHtml::encode($

CGridView小部件已经有了view、update、dete选项。但是我在基于jquery mobile的项目中使用了CListView小部件,但是在为delete选项创建ajax链接时遇到了问题。不知道如何在_view.php(视图文件)及其renderPartial()视图文件中创建一个ajax删除链接,以便在成功删除后将工具栏消失。请提前感谢plz帮助。这里是用于编辑和删除的_view.php文件链接

<?php 
echo CHtml::link(CHtml::encode($data->id), 
    array('editmember1', 'id' => $data->id), 
    array('data-role' => 'button', 'data-icon' => 'star')
);

echo CHtml::link(CHtml::encode($data->id), $this->createUrl('customer/delete', array('id' => $data->id)), 
    array(
       // for htmlOptions
       'onclick' => ' {' . CHtml::ajax(array(
       'beforeSend' => 'js:function(){if(confirm("Are you sure you want to delete?"))return true;else return false;}',
       'success' => "js:function(html){ alert('removed'); }")) .
       'return false;}', // returning false prevents the default navigation to another url on a new page 
       'class' => 'delete-icon',
       'id' => 'x' . $data->id)
   );

发生这种情况是因为:

  • 未调用正确的操作,因为您尚未设置的
    url
    属性。您应该知道,Yii的
    CHtml::ajax
    构建在jQuery的ajax之上。因此,您可以添加:

    CHtml::ajax(array(
      ...
      'url'=>$this->createUrl('customer/delete', array('id' => $data->id,'ajax'=>'delete')),
      ...
    ))
    
    在url中,我还传递了一个ajax参数,以便操作明确地知道这是一个ajax请求

  • 然后默认情况下控制器操作(即Gii生成的CRUD)期望请求为post类型,您可以在customer/delete操作行中看到这一点:
    if(Yii::app()->request->isPostRequest){…}
    。因此,您必须发送POST请求,再次修改ajax选项:

    CHtml::ajax(array(
      ...
      'type'=>'POST',
      'url'=>'',// copy from point 1 above
      ...
    ))
    
  • 或者,您也可以使用

  • 要在删除后更新CListView,请调用
    $.fn.yilistView.update(“列表视图的id_”)。比如:

    CHtml::ajax(array(
      ...
      'type'=>'POST',
      'url'=>'',// copy from point 1 above
      'complete'=>'js:function(jqXHR, textStatus){$.fn.yiiListView.update("mylistview");}'
      ...
    ))
    

  • 链接很好,您还想完成什么?@bool.dev它没有删除记录,也没有显示任何错误:(好的,当前键入一个answer@bool.dev是的,这是由于控制器删除函数已设置为if(Yii::app()->request->isPostRequest),应将其更改为if(Yii::app()->request->isAjaxRequest)对于启用ajax请求,感谢您的快速响应:)不,不要这样做!!错误的做法,删除任何东西以外的职位,看看我的答案应该解决。编辑:还必须调用正确的url,现在您的ajax不会调用customer/delete,您必须设置url属性我已经更新了答案,包括如何更新(删除删除的clistview栏)谢谢@bool.dev这真的很有帮助。