2012-03-30 2 views
6

Хорошо, серьезно боретесь здесь. У меня возникли проблемы с попыткой отправить многомерный массив на PHP через ajax. Вот что я пытался:Многомерные массивы через ajax для PHP

Для упрощения, а не копировать вставить стену код:

peoplearray[0] = [name] => 'john' 
         [age] => '28' 
         [sex] => 'Male' 
    peoplearray[1] = [name] => 'julie' 
         [age] => '20' 
         [sex] => 'Female' 

    main_array['item'] = 'x'; 
    main_array['something'] = 'x'; 
    main_array['another'] = 'x'; 

Я хочу, чтобы это PHP через post. Я полагал, что может Aswell просто соединить их вместе, как я многомерные так или иначе, таким образом:

main_array['peoplearray'] = peoplearray; 

теперь делать Аякс:

// var data = JSON.stringify(main_array); 

var send = $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} //I do change this `main_array` when using the above stringify! 
}); 


send.done(function(msg) { 
console.log(msg); 
}) 

в PHP Я просто делаю сейчас следующий:

$data= $_POST['data']; 
print_r($data); 

в поджигатель: (an empty string)

, когда у меня есть var data = JSON.stringify(main_array); раскомментирована я получаю следующее: [][

если добавить $data = json_decode($_POST['data']); в PHP я получаю:

Array () 

В основном main_array я понимаю, не нужно быть массивом, и поэтому я могу получить, что материал по без проблем но то, что мне нужно сделать, это получить peoplearray, чтобы я мог сделать foreach и т. д. ... с ним в php. Любая помощь будет очень признательна, я уверен, что я просто глуп!

EDIT: Обоснование этого состоит в том, что peoplearray может иметь 0 или 100 записей, поэтому мне просто нужно получить его на php, чтобы я мог foreach его делать входы БД. Если будет лучший подход, я был бы очень благодарен за это, потому что я до сих пор довольно новичок в этом.

EDIT: Благодаря ответу Никола, все проходит отлично, за исключением важной части, которая является mainarry.peoplearray - она ​​не появляется в обратном console.log, и я не могу получить доступ к ней на PHP. Любые решения по этому поводу или мне нужно поставить интеллект foreach в javascript и просто отправить все индивидуально?

+1

Вы можете разместить всю функцию JS, которая делает запрос ajax? если вы используете console.log (main_array) (перед вызовом $ .ajax), что он показывает в firebug? –

+0

Я получаю правильный результат с console.log (main_array), когда делаю это перед JSON.stringify. После JSON.stringify я получаю: []. Что касается ajax, это все, что я делаю в настоящее время. На самом деле это единственная настоящая копия и вставка! Просто, чтобы добраться до этого момента, я взял навсегда отладки массивов в Chrome, это не я, я только что узнал. – Zac

ответ

1

Я получил его на работу, сохраняя peoplearray ОТДЕЛЬНО.

Итак, я сделал, как сказал Никола, и создал mainarray как объект, т.е. объявляя с фигурной скобкой: {}

peoplearray я оставил как массив, т.е. объявляя с [], однако затем name,age&sex поля Я создал в качестве объекта, т.е.. {}, а затем .push() их в peoplearray.

Тогда Аякса выглядел следующим образом:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array, people:peoplearray} 
}); 

затем с PHP все доступно в $ _POST, а если вы

echo json_encode($people); //or whatever var name it is stored as in the php 

объекты т.е. name,age,sex свойства приведены в

send.done(function(msg) { 
console.log(msg); 
}) 
+0

Это должно было сработать, сохранив их toghether, но это хорошее решение. –

+0

Да почему-то как сообщение, так и return показывали как null, когда у меня был массив внутри объекта или массив внутри массива, поэтому я должен был разделите их и убедитесь, что каждый «человек» является объектом внутри 'peoplearray'. Большое спасибо за вашу помощь Никола. – Zac

7

Прежде всего main_array не является массив, а объект, поскольку в JavaScript нет ассоциативных массивов, и по этой причине

main_array['peoplearray'] = peoplearray; 

эквивалентно

main_array.peoplearray = peoplearray; 

и вы должны объявить main_array как это

var main_array = {}; 

затем попытайтесь изменить свою функциональность п так:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} 
}); 

и на стороне сервера

header('Content-type: application/json'); 
$data= $_POST['data']; 
echo json_encode($data); 
+0

Во-первых, спасибо за ответ. Я понимаю, что у меня отсутствует основное понимание объекта/массива, который мне нужно заполнить. Это отлично работает, но я теряю peoplearray в возвращенном объекте, несмотря на то, что он показывается раньше. Также как мне получить доступ к каждому свойству на стороне php? – Zac

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