Как я могу отправить массив объектов javascript в php-скрипт через $.post?

StackOverflow https://stackoverflow.com/questions/1499137

Вопрос

У меня есть таблица данных на моей странице.Это столбцы "начало", "конец", "комментарий" и "параметры".В столбце параметры находится кнопка для удаления строки и кнопка, которая делает строку таблицы доступной для редактирования.Это позволяет изменять значения "start", "end" и "comment".Повторное нажатие на нее завершает процесс редактирования.Наконец, есть способ добавить еще одну строку в таблицу.Все это работает так, как и ожидалось.

Я хочу добавить кнопку внизу, которая создает массив из данных в таблице, который выглядит следующим образом (представлен в виде JSON исключительно для удобства отображения в SO:не требуется):

[
    {
        "start"     :"2009/08/01",
        "end"       :"2009/08/08",
        "comment"   :"an example date.",
    },
    {
        "start"     :"2009/07/01",
        "end"       :"2009/07/08",
        "comment"   :"another example date, a month earlier.",
    },
    {
        "start"     :"2000/07/01",
        "end"       :"2000/07/08",
        "comment"   :"another example date, a year earlier. You get the idea.",
    }
]

У меня не должно возникнуть особых проблем с созданием массива, но как только я это сделаю, как я могу опубликовать его в серверном php-скрипте (который затем будет использовать put_csv() записать данные в файл)?В идеале, это было бы доступно на стороне сервера в формате массива, чтобы обеспечить проверку.

Я с удовольствием использую jquery, если это необходимо.

Это было полезно?

Решение

То, как вы передадите его на сервер, зависит от того, что вы хотите заархивировать.Если вы хотите загрузить новую страницу, которая будет обрабатывать данные, вы можете использовать обычную форму со скрытыми входными данными.В качестве альтернативы, если вы хотите обрабатывать is в фоновом режиме через AJAX, используйте jQuery.ajax как сказал Краско.В любом случае, вам необходимо преобразовать структурированный массив в простой список ключей / значений.

Один из вариантов - сгенерировать документ в формате JSON (я не думаю, что jQuery предоставляет функцию для этого, но вы можете легко найти что-нибудь) и использовать одно поле с сериализованным документом.Затем на стороне сервера вы бы использовали json_decode чтобы вернуть массив обратно.Если вы используете метод AJAX, параметр data в jQuery.ajax вызов будет содержать:

{
    'data': '[{"start":"2009/08/01","end":"2009/08/08","comment":"an example date."},...'
}

Лучшим подходом было бы сериализовать его в список полей в формате, понятном PHP изначально.Это означает, что вам не нужно делать ничего особенного, и $_POST['data'] будет содержать массив.Например:

{
    'data[0][start]': '2009/08/01',
    'data[0][end]': '2009/08/08',
    'data[0][comment]': 'an example date.',
    'data[1][start]': '2009/07/01',
    'data[1][end]': '2009/07/08',
    'data[1][comment]': 'another example date, a month earlier.',
    ... 
}

Если вы используете метод формы, вам необходимо сгенерировать поля ввода, такие как:

<input type="hidden" name="data[0][start]" value="2009/08/01" />

Другие советы

Я бы определенно использовал jQuery.Вот страница для функции $.post().

http://docs.jquery.com/Ajax/jQuery.post

Одно предостережение заключается в том, что $.post() - это оболочка для функции $.ajax(), которая упрощена и исключает вашу возможность устанавливать обратные вызовы для чего угодно, кроме успешной публикации.Для важных транзакций через AJAX я бы использовал это:

http://docs.jquery.com/Ajax/jQuery.ajax

Примером является:

$.ajax({
      url: "script.php",
      global: false,
      type: "POST",
      data: ({id : this.getAttribute('id')}),
      dataType: "html",
      success: function(msg){
         alert(msg);
      }
   });
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top