Отправьте массив js на php @jquery @codeigniter

я пытаюсь передать массив 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

1
задан Joeyjoejoe 28 July 2010 в 14:15
поделиться

3 ответа

Хорошо , я нашел решение! Вот код (с 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;
    }
}

Спасибо Калле за то, что поставил меня на правильный путь.

1
ответ дан 2 September 2019 в 22:39
поделиться

Как вы узнаете, что ключ - это «данные», разве это не будет то, что вы передали в сериализованной строке?

Например, если бы у вас был такой массив:

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

И вы сериализовали его и отправили в контроллер, вы должны получить это значение следующим образом:

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

Не так, как я думаю, вы пытаетесь сделать, но я могу ошибаться:

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

Чтобы исправить это, вы можете поместить массив js в другой массив с ключом data, а затем сериализовать его ..

1
ответ дан 2 September 2019 в 22:39
поделиться

Что делает ваша функция сериализации ? Если он не переводит этот массив в строковый формат, вы, скорее всего, ничего не увидите в своем контроллере.

0
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: