Как хранить данные многомерных форм? - PullRequest
1 голос
/ 07 июня 2011

У меня есть форма, где поля добавляются через JavaScript. Это довольно легко сохранить без набора дополнительного JS-кода (для удаления и переупорядочения), используя массивные имена для полей.

<input type="text" name="product[]" />

Проблема возникает, когда мне нужен многомерный массив данных формы.

order
  request_date
  product[]
  quantity[]
    warehouse1
    warehouse2
    etc...

По сути, каждый заказ имеет данные о заказе, нескольких товарах, и каждая товарная позиция может быть доставлена ​​из одного или нескольких складов. Если количество заказа отдельной позиции составляет 100, а склад первого выбора имеет только 50 единиц, им нужно будет выбрать вторичный склад, чтобы получить вторые 50 единиц из ...

Я пытаюсь вынести все это на одну страницу, возможно, с помощью всплывающих окон JS для выбора между различными складами.

Проблема в том, что я пытаюсь найти хороший способ отправить эту информацию на сервер.

Я хотел бы использовать информацию о позиционированных позициях в массиве, но не могу понять, как отправить несколько хранилищ для каждой позиции обратно на сервер. Должен ли я просто сделать что-то вроде значений, разделенных запятыми, в скрытом поле (заполненном всплывающим окном выбора хранилища JS)? Есть ли способ лучше? Любые предложения приветствуются. Спасибо.

Если это имеет значение, бэкэнд - PHP.

Ответы [ 4 ]

1 голос
/ 07 июня 2011

Попробуйте:

<input name="order[product][]" value="" />
<input name="order[product][]" value="" />
<input name="order[product][]" value="" />
etc...
1 голос
/ 07 июня 2011

Отправить как JSON.

order: {
    request_date: '07/06/2011',
    products: [
    {
        id: 1,
        quantity: 3,
        warehouses: [1]
    },
    {
        id: 2,
        quantity: 4,
        warehouses: [1,2]
    },
    {
        id: 3,
        quantity: 5,
        warehouses: [3]
    }]
}
1 голос
/ 07 июня 2011

Почему бы не использовать JSON? В конце PHP вы получите массив элементов для вложенных массивов.

Мне кажется, что вы либо не знаете о JSON (а с SO 3 раза, я не могу в это поверить), либо не знаете, что можете передать JSON обратно на сервер.

Но то, что вы описываете, звучит как естественная и идеально подходящая.


"вставить этот элемент массива как объект в возвращаемое значение"

var returnObject = { field1: "value", field2: "value" };
var buildArray = [];
$(specificSelector).each(function(){
  buildArray.push($(this).data('myKey'));
});
returnObject.field3 = buildArray;
  • Обратите внимание, что здесь используется .each, который уродлив и противен. Есть лучшие способы сделать это, если вы хотите скорость или чистоту. Но это работает.
  • Обратите внимание, что я не проверил это полностью, это было не в моей голове, для демонстрации концепции.
  • Обратите внимание, что я предполагаю, что каждый объект, который будет выбран, имеет .data, связанный с ним, с ключом 'myKey'. Вместо этого вы могли бы перебирать каждую ячейку в таблице или что угодно. Вот как I делает это, и в любом случае, вероятно, приводит к раздутым страницам. Но когда я добавляю строку, я присоединяю значение как объект, чтобы я мог делать такие вещи быстрее (быстрее набирать, что есть)
0 голосов
/ 07 июня 2011

Вы можете использовать поле множественного выбора для всех складов.Если вам также необходимо указать, сколько единиц на склад, это не сработает.Вы можете сделать это следующим образом:

<select name="order4quantity2warehouse">
  <option>Warehouse 1</option>
  <option>Warehouse 2</option>
</select>
<input name="order4quantity2warehouse-quantity" />

Затем на сервере размером вы декодируете $ _POST для преобразования всех данных в массивы.Например, вы можете сделать это, циклически перебирая ключи $ _POST и определяя, какому шаблону соответствует ключ, например, на складе [количество] количество [количество], а затем вставляя его в соответствующее место в ваших массивах.

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