Многомерные массивы через 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);
})