Многомерные массивы через ajax на PHP
ОК серьезно борется здесь. У меня возникли некоторые проблемы пытаюсь отправить массив multdimensional в PHP через AJAX. Вот что я пытался сделать:--17-->
чтобы упростить, а не копировать вставить стену кода:
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
. Я решил, что могу просто объединить их вместе, поскольку я многомерен в любом случае так:
main_array['peoplearray'] = peoplearray;
теперь, чтобы сделать ajax:
// 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);
в firebug:(an empty string)
когда у меня есть var data = JSON.stringify(main_array);
uncommented я получаю следующее:[][
если я добавить $data = json_decode($_POST['data']);
на php я получаю:
Array ( )
в основном main_array
Я понимаю, что не нужно быть массивом и поэтому я могу сделать это через без проблем, но что мне нужно сделать, это получить peoplearray
так что я могу сделать некоторые foreach
etc... с ним в php. Любая помощь была бы очень признательна, я уверен, что я просто глупость!
EDIT: обоснование этого заключается в том, что peoplearray
может иметь 0 или 100 записей, поэтому мне просто нужно получить его на php, чтобы я мог foreach
это сделать входы DB. Если есть лучший подход, я был бы очень благодарен услышать его, поскольку я все еще довольно новичок в этом.
EDIT: благодаря ответу Николы все проходит нормально, кроме важной части, которая является mainarry.peoplearray-он не появляется в The return console.log
и я не могу получить доступ к нему РНР. Любые решения по этому поводу или мне нужно поместить интеллект foreach в javascript и просто отправить все по отдельности?
2 ответов
в первую очередь 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);
я получил его работать, сохраняя peoplearray
отдельно.
Итак, я сделал, как сказала Никола, и создал mainarray
как объект ie. объявление с завитушками:{}
на peoplearray
Я оставил как массив ie объявления с []
, однако после name,age&sex
поля, которые я создал как объект ie. {} а потом .push()
их в peoplearray
.
затем "Аякс" выглядел следующим образом:
var send = $.ajax({
type: "POST",
dataType: "json",
cache: false,
url: "theurl",
data: {data:main_array, people:peoplearray}
});
тогда с PHP все доступно в $_POST, а если ты ... --13-->
echo json_encode($people); //or whatever var name it is stored as in the php
объекты ie name,age,sex
свойства отображаются в
send.done(function(msg) {
console.log(msg);
})