Опубликовать массив js на php @jquery @codeigniter - PullRequest
1 голос
/ 28 июля 2010

Я пытаюсь передать массив javascript в контроллер php (я использую codeigniter) с помощью метода post ajax.Данные, похоже, отправлены, но $ _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, мне интересно, если тип контента неправильный:

Application-Type 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

Ответы [ 3 ]

1 голос
/ 28 июля 2010

Откуда вы знаете, что ключом является 'data', не будет ли это тем, что вы передали в сериализованной строке?

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

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

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

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

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

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

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

1 голос
/ 28 июля 2010

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

Спасибо Калле за то, что помог мне.

0 голосов
/ 28 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...