Отправить многомерный массив через $ .post с помощью jquery - PullRequest
2 голосов
/ 23 ноября 2010

У меня есть глобальная переменная, которую я использую для хранения информации в проекте, над которым я работаю. Это объект с различными значениями, и я думаю, другие объекты в нем. Например ...

$.myVar {
    currentProj : "Project 1",
    allProjs : [],
    toggleVar : 0
}

Теперь, когда программа работает и я что-то делаю, я фактически добавляю массивы в allProjs. Я хочу использовать индекс массива в качестве имени проекта, а затем он содержит кучу информации. Вот пример того, как выглядит объект после запуска программы в течение нескольких минут.

(скопировано с консоли Chrome):

$.myVar
    Object
    currentProj: "McB2"
    toggleVar: 0
    allProjs: Array[0]
        McB1: Array[0]
            length: 0
            __proto__: Array[0]
        McB2: Array[4]
            0: "02070124"
            1: "02030036"
            2: "02090313"
            3: "02090450"
            length: 4

Теперь я хочу передать эти данные в файл PHP, используя $ .post, чтобы я мог преобразовать их в JSON и сохранить на сервере.

Я делаю это в основном, просто запустив:

$.post('saveJSON.php', $.myVar, function(data) {
    $('#dumpspace').html(data);
});

Для отладки у меня есть PHP-файл, который просто выводит:

print_r($_REQUEST);

Теперь я ожидаю многомерный массив, который можно преобразовать в JSON, а затем сохранить, но все, что он выделяет, это:

Array ( [currentProj] => McB2 [toggelVar] => 0 )

Итак, я вижу, что он не отправляет раздел allProj объекта, но я не уверен, почему! Кажется, он появляется, когда я смотрю на объект в консоли, поэтому я не уверен, что мне не хватает.

Любая помощь приветствуется.

Спасибо!

Разъяснение

Первый раздел, где я объявляю все проекты, возможно, я что-то там не так делаю? Когда я запускаю Stringify, я получаю такой же неправильный результат:

JSON.stringify($.myVar)
"{"currentProj":"McB2","allProjs":[],"toggleVar":0}"

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Вам необходимо .stringify объект / массив в строку JSON. Все "современные" браузеры поддерживают это изначально с JSON.stringify(obj). Если вам нужно также поддерживать «старую» версию браузера, вам нужно перейти на http://www.json.org и загрузить json2.js lib, который предлагает те же функции.

С другой стороны, если вы хотите получить JSONized-строку от сервера, вам нужно либо сообщить jQuery, что вы ожидаете json-строку, передав 'json' в ваш вызов $.post(), либо вам нужно проанализируйте полученные данные самостоятельно, снова получив доступ к объекту JSON. JSON.parse(json_string) вернет объект Javascript из переданной строки JSON.

1 голос
/ 23 ноября 2010

Разобрался с моей проблемой. Когда я первоначально объявлял объект, я делал allProj и Array, вставляя []. Если я добавлю это как allProj: {}, то это будет отлично работать! Спасибо за предложения, помог сузить мою ошибку.

-M

0 голосов
/ 23 ноября 2010

Я полагаю, что вы должны сначала преобразовать свой массив в формат JSON, прежде чем отправлять в PHP.

Это метод, который я использовал в прошлом:

var jsonOb = JSON.stringify(yourArray);

$.post(
"yourPage.php",
{jsonOb:jsonOb},
function(r){
//your success response
}
);

Надеюсь, что это делаетбрат трюк!

W.

...