Javascript 将js数组发布到php@jquery@codeigniter

Javascript 将js数组发布到php@jquery@codeigniter,javascript,jquery,ajax,codeigniter,post,Javascript,Jquery,Ajax,Codeigniter,Post,我试图通过ajax post方法将javascript数组传递给php控制器(我使用的是codeigniter)。数据似乎已发送,但$U POST['Data']未知。代码如下: JAVASCRIPT: function update_order(){ var ordre_column1 = $('#column1').sortable('toArray'); var data = serialize(ordre_column1); $.post('../../controlleur_grou

我试图通过ajax post方法将javascript数组传递给php控制器(我使用的是codeigniter)。数据似乎已发送,但$U POST['Data']未知。代码如下:

JAVASCRIPT:

function update_order(){
var ordre_column1 = $('#column1').sortable('toArray');
var data = serialize(ordre_column1);

$.post('../../controlleur_groupe_admin/ordre_box',data);
}
我的控制器:

function ordre_box() {
    $data = $this->input->post('data')
    $array = unserialize($data);
    print_r($array);
}
我在firebug中没有得到回报,我想知道内容类型是否错误:

内容类型应用程序/x-www-form-urlencoded;字符集=UTF-8

谢谢

要稍微简化代码,请执行以下操作:

Javascript:

function update_order(){
var ordre_column1 = $('#column1').sortable('toArray');
var data = ordre_column1.toString();

$.post('../../controlleur_groupe_admin/ordre_box',data);
}
function update_order(){
var items=[];    // This common array will get all info for each item.
var ordre_column1 = $('#column1').sortable('toArray');
for (var i in ordre_column1){    //create an array for a single item
var item ={id: ordre_column1[i],
           column_id: 1,
           sort_no: i
};
items.push(item);   // put the single item array in common array
}
var ordre1={ items: items };

$.post('../../controlleur_groupe_admin/ordre_box','data='+$.toJSON(ordre1));  //post the data to JSON format
}
控制器:

function ordre_box() {
    echo $_POST['data'];
}
function ordre_box() {
    $data = $_POST['data'];
    $json = str_replace('\\','',$data); //we replace all backslashes with nothing, which results in a correct json_decode string
    $newdata = json_decode($json);  // decode JSON format to php array
    foreach($newdata->items as $item){  // Now i can use the data
        echo " objet :";
        echo $item->id;
        echo ",";
        echo $item->column_id;
        echo ",";
        echo $item->sort_no;
    }
}
Firebug说:消息:未定义索引:$data

但帖子是存在的:Paramètresapplication/x-www-form-urlencoded 131,126,125,156,154 来源
131126125156154

您的
序列化功能是什么?如果它没有将该数组移动到字符串格式,那么在控制器中可能看不到任何内容

您如何知道密钥是“data”,它不是您在序列化字符串中传递的任何内容吗

例如,如果您有这样一个数组:

$array['value'] = 'hey!';
$this->input->post('value');
然后将其序列化并发送到控制器,您将检索该值,如下所示:

$array['value'] = 'hey!';
$this->input->post('value');
不是这样,我想你是想这么做,但我可能错了:

$array = $this->input->post('data');
echo $array['value'];

要修复它,您可以将js数组放入另一个数组中,其中包含一个名为data的键,然后将其序列化。

好的,我找到了解决方案!下面是代码(使用jquery.json-2.2.min.js):

Javascript:

function update_order(){
var ordre_column1 = $('#column1').sortable('toArray');
var data = ordre_column1.toString();

$.post('../../controlleur_groupe_admin/ordre_box',data);
}
function update_order(){
var items=[];    // This common array will get all info for each item.
var ordre_column1 = $('#column1').sortable('toArray');
for (var i in ordre_column1){    //create an array for a single item
var item ={id: ordre_column1[i],
           column_id: 1,
           sort_no: i
};
items.push(item);   // put the single item array in common array
}
var ordre1={ items: items };

$.post('../../controlleur_groupe_admin/ordre_box','data='+$.toJSON(ordre1));  //post the data to JSON format
}
数据以JSON格式发送到控制器

控制器:

function ordre_box() {
    echo $_POST['data'];
}
function ordre_box() {
    $data = $_POST['data'];
    $json = str_replace('\\','',$data); //we replace all backslashes with nothing, which results in a correct json_decode string
    $newdata = json_decode($json);  // decode JSON format to php array
    foreach($newdata->items as $item){  // Now i can use the data
        echo " objet :";
        echo $item->id;
        echo ",";
        echo $item->column_id;
        echo ",";
        echo $item->sort_no;
    }
}

感谢Calle让我走上了正轨。

你知道你的php代码实际上正在被调用吗?你的url可能不起作用我真的不知道serialize做什么,我只是读了一篇技巧文章,说unserialize将在php数组中转换我的数组。这是文件:。但是在使用它之前,我的代码就是这样,我有同样的问题:函数update_order(){var ordre_column1=$('#column1').sortable('toArray');var data=ordre_column1.tostring()$.post('../../controller_groupe_admin/ordre_box',data);}然后我使用explode来生成一个数组。事实上,
$('#column1 column1').sortable('toArray'))
返回#column1中包含的所有框id的列表,我有一个数组:数组[0]=第一个id数组[1]=第二个id。。。等等,我需要检索php数组中的所有值。我不太明白你说的话(我的英语)。在jquery上下文中,serialize用于表单元素。在这种情况下,表单元素的名称将是键。如果没有任何键,则以后无法检索数据。现在我看到您更改了serialize,并改为使用“toString”。这是错误的,它只是将布尔类型的变量转换为字符串类型的变量。这不是你想要的。我想你需要这样的东西,但我不知道你是否能理解:我希望我能更好地解释这一点,也许其他人可以。我已经关注了这个话题,这似乎是解决我问题的最好办法。但我有点懒,所以我尝试了更简单的事情。。。事实上我不应该。谢谢,我会在找到解决方案后发布。