Сборка json для отправки в php с помощью цикла for (возможно) - PullRequest
0 голосов
/ 04 ноября 2010

Я погуглил, но я могу найти способ собрать json с помощью jQuery и отправить его в php с помощью цикла for. У меня есть таблица HTML, и я хочу взять значения из каждой строки (я не знаю, сколько будет строк / значений) построить строку JSON, т.е. [{"row": 1, "supp_short_code" : blah blah....}, {"row": 2, ....} ....] но я не знаю, как продолжать добавлять к строке данных json каждый раз, когда jQuery находит больше значений, если это имеет смысл ??

EDIT:

Так что, если у меня есть это

$('#submit').live('click',function(){ 
                    var supp_short_code=$('.supp_short_code').text();
                    var project_ref=$('.project_ref').text();
                    var om_part_no=$('.om_part_no').text();
                    var description=$('.description').text();
                    var cost_of_items=$('.cost_of_items').text();
                    var cost_total=$('.cost_total').text();
                    var dataString = 'string=//' + supp_short_code + '//' + project_ref + '//' + om_part_no + '//' + description + '//' + cost_of_items + '//' + cost_total

                    $.ajax
                        ({
                        type: "POST",
                        url: "order.php",
                        data: dataString,
                        cache: false,
                        success: function()
                            {
                                alert("Order Submitted");
                            }
                        });
                });

Так что (примерно) мне нужно изменить в этом коде? Screenshot

Хорошо, как вы можете видеть на скриншоте, я использую jquery для динамического добавления нижней таблицы, когда пользователь щелкает строку из верхней таблицы, ее итоговые значения и они могут указать, какого поставщика они хотят использовать. Затем я использую jquery для захвата этих значений в бит $ ('submit') кода jquery сверху. Затем я хочу отправить эти значения на страницу php, которая будет каким-то образом анализировать полученные данные при вставке их в базу данных mysql, как что-то вроде «id 1 product blah price blah supplier blah total cost £ x, id 2 product blah2 price blah2 supplier бла общая стоимость £ x ", поэтому некоторые поля, т.е. общая стоимость и поставщик будут одинаковыми, но php может получать 3 разных продукта для одного и того же заказа, если это имеет смысл? Спасибо!

Ответы [ 2 ]

5 голосов
/ 04 ноября 2010

Вам не нужно создавать JSON, просто создайте массив данных и отправьте его с .post, .get или .ajax. jQuery позаботится о кодировании массива за вас:

var data = {};

for (var i = 0; i < 3; ++i) {
   data['field' + i] = 'value' + i;
}

$.post ('http://mysite.com/page', data, function() { alert('succes!'); });

Массив $_POST вашего серверного кода будет содержать:

array( 'field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3'); 

Для вашего примера я бы пересмотрел отправку данных в виде строки и вместо этого отправил бы данные в виде хорошо отформатированных пар ключ / значение. Ваш код на стороне сервера может легче решить, что с ним делать, и ваш JS не потребует переписывания, если код на стороне сервера требует, чтобы строка была построена иначе.

$.ajax ({
  type: "POST",
  url:  "order.php",
  data: {
   supp_short_code: $('.supp_short_code').text(),
   project_ref:     $('.project_ref').text(),
   om_part_no:      $('.om_part_no').text(),
   description:     $('.description').text(),
   cost_of_items:   $('.cost_of_items').text(),
   cost_total:      $('.cost_total').text()
  }
  //...
});

Обновление

Вы можете уменьшить объем ввода, бросая имена полей в массив и добавляя имя класса любых полей, которые вы хотите включить в массив данных. Затем переберите все строки таблицы и извлеките значения:

var fields = [ 'supp_short_code', 'project_ref', 'om_part_no',
  'description', 'cost_of_items', 'cost_total'];

var data = [];

// loop over each row
$('#my-table tr').each(function (i, tr) {
  // extract the fields from this row
  var row = {};
  for (var f = 0; f < fields.length; ++f) {
    row[fields[f]] = $(tr).find('.' + fields[f]).val();
  }

  // append row data to data array
  data.push(row);
});
2 голосов
/ 04 ноября 2010

Вот быстрый способ получить данные из вашей таблицы и отформатировать их как массив:

var data_to_send = $('#yourtable').find('tr').map( function(idx){
  return [ 
      'row': idx+1,
      'supp_short_code' : $(this).find('td').eq(2).text(), 
      'something_else' : $(this).find('td').eq(3).text() // etc
  ];      
}).get();

Теперь у вас есть data_to_send, массив, отформатированный аналогично примеру в вашем вопросе. Как указывает @meagar, вы можете просто отправить это на сервер с помощью .ajax() и др. И позволить jQuery автоматически обрабатывать кодировку. Примерно так:

$.ajax ({
  type: 'post',
  url:  'your_script',
  data: data_to_send
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...