【问题标题】:CakePHP delete using ajaxCakePHP 使用 ajax 删除
【发布时间】:2016-02-05 20:46:18
【问题描述】:
in index.ctp my code is as follows :-
<?php
            foreach( $teacher as $teachers )
            {
                echo "<tr>";
                echo "<td>".$teachers['Teacher']['username']."</td>";
                echo "<td>".$teachers['Teacher']['dgen']."</td>";
                echo "<td>".$teachers['Teacher']['dqual']."</td>";                  

                <?php
                echo "<td>".$this->Form->postLink(__('Delete'), array('action' => 'delete',$teachers['Teacher']['id']), null, __('Are you sure you want to delete %s?', $teachers['Teacher']['id']))."</td>";

                echo "</tr>";
            }
        ?>      

我的控制器代码:-

 public function delete() 
    {
        $this->autoRender = false;
        $this->layout = 'ajax';
        $id = $_GET['id'];          
        $this->loadModel('Teacher');
        $this->Teacher->delete($id);
        //$this->Session->setFlash('The post with id: '.$id.' has been deleted.');
        //$this->redirect(array('action'=>'index'));
    }

Ajax 调用:

 <script type="text/javascript">
        $('a.deleteajax').click(function(event){
        event.preventDefault();
        var answer = confirm("Delete this record?")
        if (answer){
            $.ajax({
                url:'/Teachers/TeachersController/delete/',
                type:'GET',
                data: $(this).attr("href")
            });
        }
        return false;  
        });
    </script>

请帮帮我...我想删除记录而不刷新页面。

【问题讨论】:

  • 您要进行的 ajax 调用在哪里。首先尝试写一些东西,如果它不起作用,请询问。
  • sry... 我在将我的 ajax 代码发布在 iindex.ctp 时遇到问题,如下所示:-
  • 这个 ajax url 对我来说看起来很奇怪......如果你的控制器名称是 TeachersController,它应该是:/teachers/delete。但是你真的应该首先阅读文档,因为你在删除操作中做了一些非常奇怪的事情,比如使用loadModel 将模型加载到控制器。阅读文档。

标签: php jquery ajax cakephp


【解决方案1】:

将 ajax 更改为:将 id 添加为 data 中的键以在您的控制器中访问它。最好添加成功部分以确认操作消息。

$.ajax({
             url:'/Teachers/TeachersController/delete/',
                type:'GET',
                data: {id:$(this).attr("href")},
                success:function(resp){//reso is msg string returned from controller.
                    alert(resp);
                  }

            });

【讨论】:

  • @HarshalBorse 你能在 php 部分获得 id。
  • 但不执行删除。 ajax 没有调用。我试图把警报();以便检查但不工作。
  • @HarshalBorse 在没有 loadModel 的情况下尝试 $this-&gt;Teacher-&gt;delete(5);
  • 或尝试这样的原始查询:$db = ConnectionManager::getDataSource('default'); $db-&gt;rawQuery("DELETE FROM table WHERE id=$id");
  • 什么都没有发生 .. 链接只像“#”一样工作。
【解决方案2】:

一步一步给你解决方案

首先在你的 index.ctp 中

您可以应用此代码

foreach( $teacher as $teachers )
{
          echo "<tr id='echo $teachers['Teacher']['id'];'>";  //used id for daynamic tr, for hide temporary your delete data.

          echo "<td>".$teachers['Teacher']['username']."</td>";
          echo "<td>".$teachers['Teacher']['dgen']."</td>";
          echo "<td>".$teachers['Teacher']['dqual']."</td>";                  
          echo $this->html->link('','#',
          array(
               'class'=>'del btn btn-sm btn-danger glyphicon glyphicon-remove',
               'id'=>$teachers['Teacher']['id']  //important 
          )); 

          echo "</tr>";
}

如果你使用 jquery ajax get 方法,你可以使用下面的代码。

$('.del').click(function(){
                    var x=$(this).attr("id");
                    jQuery.get("<?php echo  Router::url(array('controller'=>'teachers','action'=>'delete'));?>",               {"id":x},
   function(data,stat){

                    jQuery('#'+x).remove();
     });
});

根据您的控制器代码,您可以添加如下代码

public function delete($id=NUll) {
    $id=$_GET['id'];     // it's not a good practices you can use $this->request->data/param I mean cakephp syntax.  
    $this->Teacher->id = $id;  
    if ($this->Teacher->delete()) {
        $this->Session->setFlash(__('The user has been deleted.'));
    }
    return $this->redirect(array('action' => 'index'));
}

这段代码应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多