创建一个包含元素名称和值的json数组,并使用ajax将其提供给php

创建一个包含元素名称和值的json数组,并使用ajax将其提供给php,php,jquery,ajax,json,Php,Jquery,Ajax,Json,如果选中复选框,我想从每两行中提取所有元素,并将它们放入json数组中,然后使用ajax将其发送到php $('input.pay').each(function(){ if($(this).is(':checked')) { row = $(this).parents('tr').attr('id').split('_'); type = row[0]; payID= row[1]; payJsonArr = ''

如果选中复选框,我想从每两行中提取所有元素,并将它们放入json数组中,然后使用ajax将其发送到php

$('input.pay').each(function(){
    if($(this).is(':checked'))
    {
        row = $(this).parents('tr').attr('id').split('_');
        type = row[0];
        payID= row[1];
        payJsonArr = '';
        secondRow=', #'+type+'_'+payID+$('#rate_'+payID).attr('class');

        $('#'+type+'_'+payID+secondRow).find('.take').each(function(){
            if($(this).is('input') || $(this).is('select'))
                payJsonArr += $(this).attr('name') + ':' + $(this).val()+',';   
            else if($(this).is('td') || $(this).is('span'))
                payJsonArr += $(this).attr('name') +':'+ $(this).html().trim()+',';
        });
        payJsonArr += payJsonArr.substring(0, payJsonArr.length - 1);
        payments[payID]= '{'+payJsonArr+'}';
    }
});
问题是,通过这些代码,我在php中获得了数组,我得到了如下结果:

array(1) {
  [791]=>
  string(501) "{field 1:2012-10-07,field 2:6777.00 }"
}
如果它是一个JSON,我怎样才能得到它,就像这样:

array(1) {
  [791]=>
    [field 1]=>'2012-10-07',
    [field 2]=>'6777.00'
}

如果有人能帮助我,我将不胜感激。谢谢你们所有人帮助那些需要帮助的人。

你们应该尝试创建一个可以转换为JSON的字符串。为此,创建字符串,例如:

var jsonString= {
             "field1":"value",
             "field2":"value" 

           };

请始终记住,如果使用双引号,然后仅使用双引号,如果使用单引号,则始终使用单引号。

根据Rohit的建议,尝试以下未经测试的方法:

$('input.pay').each(function(){
if($(this).is(':checked'))
{
    row = $(this).parents('tr').attr('id').split('_');
    type = row[0];
    payID= row[1];
    payJsonArr = {};
    secondRow=', #'+type+'_'+payID+$('#rate_'+payID).attr('class');

    $('#'+type+'_'+payID+secondRow).find('.take').each(function(){
        if($(this).is('input') || $(this).is('select'))
            payJsonArr[$(this).attr('name')] = $(this).val();   
        else if($(this).is('td') || $(this).is('span'))
            payJsonArr[$(this).attr('name')] = $(this).html().trim();
    });
    payments[payID]= payJsonArr;
}

})

你也可以这样使用

`var payJsonArr = []; $('#'+type+'_'+payID+secondRow).find('.take').each(function(){ if($(this).is('input') || $(this).is('select')) payJsonArr[$(this).attr('name')] = $(this).val(); else if($(this).is('td') || $(this).is('span')) payJsonArr[$(this).attr('name')] = $(this).html().trim(); }); payments[payID]= payJsonArr;` 如果您想了解更多关于JSON的信息,那么您可以看到
这里有一些很好的例子:

没有json数组这样的东西。还有json字符串,其中包含javascript数据结构的文本表示。您不需要构建json数组。构建JS数据结构,然后将其转换为json,这是将json字符串发送到其他地方之前的最后一步。看起来您是在双重编码:构建您自己的无效/损坏的json字符串,jquery对其进行重新json编码。json是无效的,因为缺少引号。实际上,所有内容都可以解释为一个数组。特别是一个字符串。例如$string='abc',您可以得到类似于$string的'c'。[2]。感谢您毫无意义的澄清。我完全了解JSON是什么。只有最后一部分可以完成这项工作:JSON由于缺少引号而无效。这正是我希望通过2个小修补程序实现的效果。如果var payments=[];var payJsonArr=[];但是,如果您将它们定义为obejcts:var payments={};var payJsonArr={};谢谢你们给我的好建议。我很感激。哈哈,早该看看你们的帖子了:定义像object{}这样的数组正是上面帖子所缺少的。谢谢你们。你们帮了我很多:@lachezaraychev没问题。如果这是您需要的,请将此标记为正确答案: