我正在尝试使用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
答案 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
功能是做什么的?如果它没有将该数组移动到字符串格式,您可能不会在控制器中看到任何内容。