пост массив JQuery сериализации - PullRequest
2 голосов
/ 19 ноября 2009

Я пытаюсь разместить массив javascript на странице php. Массив должен быть ассоциативным. Моя структура выглядит так:

<input id="test" value="1" class="settings" />
<input id="test1" value="2" class="settings" />

Когда я создаю массив, это:

var myArray = new Array();

$(".setttings").each(function(){
     myArray[$(this).attr("id")] = $(this).val();
});

Теперь, когда я публикую эти данные, я просто делаю:

$.ajax({
    type: "POST",
    url: 'post.php",
    data: "settings="+myArray,
});

Проблема в том, что в firebug, если я смотрю пост для настроек, он пуст. Мне нужно передать массив таким образом, потому что я собираюсь взять каждую из этих настроек в php, сериализовать их и вставить в поле в базе данных. Таким образом, я могу вытащить настройки обратно и отменить сериализацию для заполнения этих полей. Есть идеи, как мне это сделать?

Ответы [ 2 ]

10 голосов
/ 19 ноября 2009

Я бы порекомендовал два изменения.

Во-первых, поскольку вам нужен ассоциативный массив в PHP, вы должны использовать объект, а не массив в Javascript:

var myObject = new Object();

$(".setttings").each(function(){
    myObject[$(this).attr("id")] = $(this).val();
});

Далее вы хотите передать его в раздел данных немного по-другому:

$.ajax({
    type: "POST",
    url: "post.php",
    data: {
        settings: $.param(myObject)
    }
});

Важной частью является $ .param, поскольку он преобразует объект в серию параметров (подходит для строки запроса).

Последнее, что вам нужно сделать на сервере, чтобы он заработал, - это проанализировать его в PHP:

parse_str($_POST['settings'], $settings);

Теперь вы можете получить доступ ко всему в переменной $settings, как в JavaScript.

$settings['id'] = "value";
3 голосов
/ 17 января 2011

Просто небольшое обновление ответа Дуга.

data: {
        settings: $.param(myObject)
    }

можно изменить на

data: myObject

Функция jQuery ajax автоматически превратит ваш объект в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...