构建json使用for循环发送到php(也许)

ben*_*e89 0 php jquery json for-loop

我已经google了,但我可以找到一种方法来使用jQuery构建json并使用for循环将其发送到php.我有一个html表,我想从每一行中获取值(我不知道将有多少行/值)构造一个json字符串,即.[{"row": 1, "supp_short_code" : blah blah....}, {"row": 2, ....} ....] 但我不知道如果jQuery发现更多的值,如果有意义的话,如何继续添加到json数据串?

编辑:

所以,如果我有这个

$('#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");
                            }
                        });
                });
Run Code Online (Sandbox Code Playgroud)

那么(大致)我需要在这段代码中改变什么? 截图

好的,正如您在屏幕截图中看到的那样,当用户点击顶部表格中的一行时,我正在使用jquery动态添加底部表格,计算总计并且他们可以指定他们想要使用哪个供应商.然后我使用jquery将这些值集中到顶部的jquery代码的$('submit')位.然后我想将这些值发送到一个php页面,它将以某种方式解析收到的数据,将其插入到mysql数据库中,就像"id 1 product blah price blah supplier blah total cost£x,id 2 product blah2 price blah2 supplier blah总成本£x"所以一些领域,即总成本和供应商将是相同的,但如果有意义,php可能会为同一订单接收3种不同的产品?谢谢!

mea*_*gar 5

您不需要构建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!'); });
Run Code Online (Sandbox Code Playgroud)

您的服务器端代码的$_POST数组将包含:

array( 'field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3'); 
Run Code Online (Sandbox Code Playgroud)

对于您的示例,我会重新考虑将数据作为字符串发送,而是将数据作为格式良好的键/值对发送.您的服务器端代码可以更轻松地决定如何处理它,如果服务器端代码需要以不同方式构建字符串,则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()
  }
  //...
});
Run Code Online (Sandbox Code Playgroud)

更新

您可以通过将字段名称放入数组中来减少键入的数量,并附加要包含在数据数组中的任何字段的类名.然后遍历每个表行并提取值:

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);
});
Run Code Online (Sandbox Code Playgroud)