如何在ajax中拆分数组?

时间:2017-03-30 06:38:29

标签: php jquery ajax codeigniter

var rows_selected = [];
var rowId = data[0]; // conten [24,25,26,27 etc]
var namaFile = data[4]; // content [foto1.JPG, foto2.JPG, foto3.JPG, foto4.JPG ]

//If checkbox is checked and row ID is not in list of selected row IDs
rows_selected.push(rowId,namaFile);

var dataId=[];
$.each(rows_selected, function(index, rowId, namaFile){
  dataId.push(rowId,namaFile);
});

在ajax中我将dataId发送到控制器

$.ajax({
   data: {"iddata": "[{"+dataId+"}]"},
});

但在控制器中,iddata只接收一个这样的数组24,6a5236ee48848e648553a35d64c4f64dJPG,25,a31ea31db31483506fbd95e463d4c8ffJPG,26,042fd1eee499e5bb9c93853c0299b42eJPG,27,e243845bcc0447324d449e37b271c9ebJPG,28,8f331fa2a713f5268ab71698a65185b6JPG

控制器中的一些代码

$iddata=array();
    $iddata=array($_GET['iddata']);
    $a=explode(",", $iddata[0]);
    $b=preg_replace('/[^A-Za-z0-9\-]/', '', $a);
    $jumlahdata=count($b)/2;
    for($i=0;$i<$jumlahdata;$i++)
    {
        //delete on database
       $data=array('id_perjal'=>$b[$i]);
       $this->M_perjal_terpasang->Delete_Foto($data);
        //and i want deleting foto with unlink
       unlink("assets/images/uploads/"$b[$i]);
    }

2 个答案:

答案 0 :(得分:0)

var rowId = [24,25,26,27];
var namaFile = ['foto1.JPG', 'foto2.JPG', 'foto3.JPG', 'foto4.JPG' ];
var rows_selected = {};
for (var i = 0; i < rowId.length; i++) {
   //or check with: if (b.length > i) { assignment }
   rows_selected[rowId[i]] = namaFile[i];
}

$.ajax({
  data: {"iddata": JSON.stringify(rows_selected)},
});

它会返回{"id_21":"foto1.JPG","id_25":"foto2.JPG","id_26":"foto3.JPG","id_27":"foto4.JPG"} 因此,在ajax页面中,您将获得类似array("id_21" => "foto1.JPG","id_25" => "foto2.JPG","id_26" => "foto3.JPG","id_27" => "foto4.JPG");

的数组

答案 1 :(得分:0)

我首先使用命名约定,并使用复数字命名数组,这样您就知道namaFiles(复数)是一个数组,并且它的一个元素被调用namaFile(单数)。这样可以避免一些混乱。

我们假设选中了两个复选框,并且它们的ID不同,那么您会以某种方式向 rows_selected 添加两行。目前,你一个接一个地推送这些值,以便得到像[24, 'foto1.JPG', 27, 'foto4.JPG']这样的数组,但你真的想让它们成对分组,如下所示:

[{rowId: 24, namaFile: 'foto1.JPG'}, {rowId: 27, namaFile: 'foto4.JPG'}]

所以你应该推送像这样的值(假设你有一个索引):

rows_selected.push( {rowId: rowIds[index], namaFile: namaFiles[index]} );

您将重复其他需要添加的对。

在Ajax数据中,您应该使用JSON字符串,如下所示:

var ajaxobj = {
   data: {"iddata": JSON.stringify(rows_selected) },
}

在服务器端,您将JSON转换回关联数组,然后通过其键名访问每对中的两个元素:

$iddata = $_GET['iddata'];
$a = json_decode($iddata, true);
foreach($a as $pair) {
   //delete in database
   $data = array('id_perjal' => $pair['rowId']);
   $this->M_perjal_terpasang->Delete_Foto($data);
   //delete foto with unlink
   unlink("assets/images/uploads/" . $pair['namaFile']);
}