я пытаюсь передать массив JavaScript php контроллеру (я использую codeigniter) с методом сообщения ajax. Данные, кажется, отправляются, но $ _POST ['данные'] не известен. Это - код:
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);
}
Я не получил возврата в поджигателе, я задаюсь вопросом, является ли тип контента неправильным:
Тип контента application/x-www-form-urlencoded; charset=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
Хорошо , я нашел решение! Вот код (с 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;
}
}
Спасибо Калле за то, что поставил меня на правильный путь.
Как вы узнаете, что ключ - это «данные», разве это не будет то, что вы передали в сериализованной строке?
Например, если бы у вас был такой массив:
$array['value'] = 'hey!';
И вы сериализовали его и отправили в контроллер, вы должны получить это значение следующим образом:
$this->input->post('value');
Не так, как я думаю, вы пытаетесь сделать, но я могу ошибаться:
$array = $this->input->post('data');
echo $array['value'];
Чтобы исправить это, вы можете поместить массив js в другой массив с ключом data, а затем сериализовать его ..
Что делает ваша функция сериализации
? Если он не переводит этот массив в строковый формат, вы, скорее всего, ничего не увидите в своем контроллере.