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

时间:2010-07-28 13:37:39

标签: javascript jquery ajax codeigniter post

我正在尝试使用ajax post方法将javascript数组传递给php控制器(我正在使用codeigniter)。数据似乎已发送,但$ _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中没有回复,我想知道内容类型是否错误:

Content-Type application / 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 ordre_box() {
    echo $_POST['data'];
}

Firebug说:

消息:未定义索引:$ data

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

3 个答案:

答案 0 :(得分:1)

你怎么知道密钥是'数据',不是你在序列化字符串中传递的任何东西吗?

例如,如果您有这样的数组:

$array['value'] = 'hey!';

你序列化并将其发送给控制器,你将检索这个值:

$this->input->post('value');

不是这样,我认为你想做的事情,但我可能错了:

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

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

答案 1 :(得分:1)

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

Javascript:

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() {
    $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让我走上了好路。

答案 2 :(得分:0)

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