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

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

编辑:

所以,如果我有这个

 $('#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"); } }); }); 

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

好的,正如您可以通过屏幕截图看到的那样,当用户点击顶部表格中的一行时,我正在使用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种不同的产品? 谢谢!

您不需要构建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); }); 

这是从表中获取数据并将其格式化为数组的快速方法:

 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 });