2010-07-28 2 views
1

Я пытаюсь передать массив javascript в php-контроллер (я использую codeigniter) с помощью метода ajax post. Данные, как представляется, отправляются, но $ _POST ['data'] неизвестно. Это код:Опубликовать js массив в php @jquery @codeigniter

JAVASCRIPT:

function update_order(){ 
var ordre_column1 = $('#column1').sortable('toArray'); 
var data = serialize(ordre_column1); 

$.post('../../controlleur_groupe_admin/ordre_box',data); 
} 

МОЙ CONTROLLER:

function ordre_box() { 
    $data = $this->input->post('data') 
    $array = unserialize($data); 
    print_r($array); 
} 

я не получил возврат в поджигатель, я задаюсь вопросом, если тип содержимого неправильно:

Содержание -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 сказать:

Сообщение: Undefined индекс: данные $

Но почта существует: Paramètresapplicat ион/х-WWW-форм-urlencoded 131.126.125.156.154 Источник 131.126.125.156.154

+0

Знаете ли вы, что ваш php-код на самом деле называется? ваш url может не работать –

ответ

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; 
    } 
} 

Благодаря Калье для надевания меня на добрый путь.

0

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

+0

Я действительно не знаю, что делать с сериализацией, я только читаю совет, что unserialize преобразует мой массив в php-массив. здесь находится документ: http://www.php.net/manual/en/function.serialize.php. Но прежде чем использовать его, мой код был таким, и у меня такая же проблема: function update_order() { var ordre_column1 = $ ('# column1'). Sortable ('toArray'); var data = ordre_column1.tostring() $ .post ('../../ controlleur_groupe_admin/ordre_box', data); } Затем я использовал взрыв, чтобы создать массив. – Joeyjoejoe

1

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

Например, если у вас массив так:

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

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

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

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

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

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

+0

Фактически '$ ('# column1'). Sortable ('toArray')' возвращает список всех идентификаторов полей, содержащихся в # column1, у меня есть этот массив: array [0] = first id array [1] = second id ... и т. д. И мне нужно получить все эти значения в массиве php. Я не очень хорошо понимаю, что вы сказали (мой английский). – Joeyjoejoe

+0

serialize, в контексте jquery, предназначен для использования в элементах формы. И в этом случае именами элементов формы будут ключи. Если у вас нет ключей, вы не сможете получить данные позже. Теперь я вижу, что вы изменили сериализацию и вместо этого поставили «toString». Это неверно, все, что он преобразует переменную типа boolean в переменную типа string. Это не то, что вы хотите. Я думаю, вам нужно что-то подобное, но я не знаю, поймете ли вы это: http://bit.ly/UAbHy Я бы хотел, чтобы я мог объяснить это лучше, может быть, кто-то другой. –

+0

Я уже смотрел на эту тему, и это, кажется, лучшее решение моей проблемы. Но я немного ленив, поэтому я попробовал более простые вещи ... я не должен на самом деле;). спасибо, я отправлю решение, когда я его найду. – Joeyjoejoe

Смежные вопросы