多重删除使用复选框

时间:2010-10-07 00:29:01

标签: php jquery ajax cakephp checkbox

我正在学习Cakephp并且我一直在尝试使用复选框删除多个(已选中)记录,但仍然没有成功。这是我的jQuery:

            var ids = [];
  $(':checkbox:checked').each(function(index){
   ids[index] = $(this).val();;
   alert(ids[index]);

  });

  //alert(ids);
  var formData = $(this).parents('form').serialize();


  $.ajax({
         type: "POST",
         url: "tickets/multi_delete",
         data:"id="+ids,
         success: function() {
     alert('Record has been delete');
    },
    error:  function(XMLHttpRequest, textStatus, errorThrown) {
       alert(XMLHttpRequest);
       alert(textStatus);
       alert(errorThrown); 
             }
   });

这里是控制器中的代码:

function multi_delete() {
  $delrec=$_GET['id'];
  //debuger::dump($del_rec);
  foreach ($delrec as $id) {

   $sql="DELETE FROM tickets where id=".$id;

   $this->Ticket->query($sql);
  }; 


 }

任何人都会帮助我。感谢

3 个答案:

答案 0 :(得分:0)

您可以在ID数组上尝试.join(','),然后在服务器端尝试使用explode()来获取传递给脚本的ID数组。

e.g。

var idStr = ids.join(','); 

将它(idStr)传递给ajax调用

$.ajax({
     type: "POST",
     url: "tickets/multi_delete",
     data: {id:idStr},
    //more code cont.

在服务器端:

$ids = explode(',',$_POST['ids']);

OR

检查jquery文档中的jquery.param()函数。应用到IDS数组,然后将其传递给$ .ajax({});

注意:您使用的是POST而不是您提供的代码中的GET HTTP METHOD

答案 1 :(得分:0)

使用json编码和解码进行序列化数据传输

答案 2 :(得分:0)

由于默认情况下jQuery不支持JSON编码,请下载JSON Plugin for jQuery

您的javascript随后变为:

$.ajax({
     type: "POST",
     url: "tickets/multi_delete",
     data: { records: $.toJSON(ids) },
     success: function() {
         alert('Records have been deleted.');
     },
});

控制器

var $components = array('RequestHandler');

function multi_delete() {
        if (!$this->RequestHandler->isAjax()) {
            die();
        }
        $records = $_POST['records'];
        if (version_compare(PHP_VERSION,"5.2","<")) {
            require_once("./JSON.php"); //if php<5.2 need JSON class
            $json = new Services_JSON();//instantiate new json object
            $selectedRows = $json->decode(stripslashes($records));//decode the data from json format
        } else {
            $selectedRows = json_decode(stripslashes($records));//decode the data from json format
        }
        $this->Ticket->deleteAll(array('Ticket.id' => $selectedRows));
        $total = $this->Ticket->getAffectedRows();
        $success = ($total > 0) ? 'true' : 'false';
        $this->set(compact('success', 'total'));
    }

RequestHandler组件确保这是一个AJAX请求。这是可选的。

相应的视图

<?php echo '({ "success": ' . $success . ', "total": ' . $total . '})'; ?>
祝你好运!