Javascript 构造JS数据jQuery多类多维数组的最佳方法

Javascript 构造JS数据jQuery多类多维数组的最佳方法,javascript,php,jquery,arrays,Javascript,Php,Jquery,Arrays,我有两部分内容:一部分是就业史,另一部分是地址史 考虑到一个人可以有多种形式的就业历史记录(如果他们在一个以上的雇主)或地址历史记录,我可以选择单击加号添加表格 因此,我有一个.click()事件处理程序,当单击它时,它会附加一个新表单 我已经在JS中构建了这样的数据,并将其发布到服务器上,但我在这样做时遇到了问题。我必须在就业或地址中插入每个索引的记录 var contents = { employment: { df1e: [ ],

我有两部分内容:一部分是就业史,另一部分是地址史

考虑到一个人可以有多种形式的就业历史记录(如果他们在一个以上的雇主)或地址历史记录,我可以选择单击加号添加表格

因此,我有一个
.click()
事件处理程序,当单击它时,它会附加一个新表单

我已经在JS中构建了这样的数据,并将其发布到服务器上,但我在这样做时遇到了问题。我必须在就业或地址中插入每个索引的记录

var contents = {
    employment: {
        df1e: [

        ],
        dt1e: [

        ],
        c1e: [

        ],
        p1e: [

        ],
        l1e: [

        ]
    },
    address: {
        df1a: [

        ],
        dt1a: [

        ],
        sa1a: [

        ],
        c1a: [

        ],
        st1a: [

        ],
        zc1a: [

        ],
    },
    name: $('#first_name').val() + ' ' + $('#last_name').val()
};
然后,我为每个元素编写了$.each()函数,并将它们添加到内容数组中。Ex(除了每一个该死的):

必须有更好的方法来做到这一点。我怎么做才能不费吹灰之力呢

<?php

$data = json_decode(file_get_contents('php://input'), true);

if($data) {
        foreach($data['employment'] as $employment) {
            $bean->name = $data['name'] . ' - Employment';
            $bean->type_c = 'Employment';
            $bean->date_from_c = $employment['df1e'];
            $bean->date_to_c = $employment['dt1e'];
            $bean->company_c = $employment['c1e'];
            $bean->position_c = $employment['p1e'];
            $bean->location_c = $employment['l1e'];

            $bean->save();
        }

        foreach($data['address'] as $address) {
            $bean->name = $data['name'] . ' - Address';
            $bean->type_c = 'Address';
            $bean->date_from_c = $address['df1a'];
            $bean->date_to_c = $address['dt1a'];
            $bean->street_address_city_c = $address['c1a'];
            $bean->street_address_state_c = $address['st1a'];
            $bean->street_address_postalcode_c = $address['zc1a'];
            $bean->street_address_c = $address['sa1a'];

            $bean->save();
        }
}

echo json_encode(array('response' => $data));

首先,对象中的键(
df1e
dt1e
等)非常神秘,因此无法准确地说出您在做什么。但保存多个地址和雇用详细信息的最佳方法是使用对象数组(即地址是对象数组,雇主是对象数组)。您的最终产品将如下所示:

    {
        "addresses": [
            {
                "street" : "123 fake street",
                "city"   : "New York",
                "state"  : "NY",
                "zip"    : "xxxxx"
            },
            {
                "street" : "910 fake lane",
                "city"   : "San Francisco",
                "state"  : "CA",
                "zip"    : "xxxxx"
            }
        ],
        "employers": [
            {
                "name"   : "stackoverflow",
                "street" : "110 William Street",
                "city"   : "New York",
                "state"  : "NY",
                "zip"    : "10038"
            },
            {
                "name"   : "google",
                "street" : "345 Spear St, Floors 2-4",
                "city"   : "San Franciso",
                "state"  : "CA",
                "zip"    : "94105"
            }
        ]
    }
这里有一个地址的例子,但是雇主部分看起来是一样的。假设每个地址条目(包括city、state、zip等)都是一个包含类“address entry”的容器,您可以这样构建地址数组

var addresses = [];

$('.address-entry').each(function(){

        var street = $(this).find('.street').val();
        var city   = $(this).find('.city').val();
        // etc - get the other values you need

       // once you have your values, 'push' an object to the addresses array
       addresses.push({

           "street" : street,
           "city"   : city,
           // etc

       });

});

// do the same for employers

// if you want it all in one object, do this
var content = {"addresses": addresses, "employers": employers};
现在你可以提交了。如果您使用的是ajax,那么很简单:

$.ajax({
    url: 'whatever.php',
    type: 'POST',
    data: content,
    success: function(resp){ console.log(resp); },
    error: function(xhr){ console.log(xhr.responseText); }
});
如果您不使用ajax,只需将
JSON.stringify(content)
的结果附加到表单中,由于您在服务器上使用php,请调用:

$addresses = json_decode($_POST['addresses'], true);
$employers = json_decode($_POST['employers'], true);
从您的php脚本


编辑:拼写

您在此处缺少一些代码,伙计,请发布所有信息,如您尝试过的内容和遇到的任何错误消息,这样您就有了一个表单,它接受用户输入并能够向表单中添加更多部分(以前工作的多个位置等)?然后,您需要将表单发送到后端,并且您想要一种好的方法来组织您发送的数据吗?@DennisMartinez Yes。我需要收集所有数据并对其进行结构化,以便可以通过PHP插入。在后端插入的最好方法是什么?在数据库中应该插入一条记录,无论是就业记录还是地址记录,我在数据库中有一个
type
列,它应该等于历史记录的任何类型。我如何将这些数据放入数组中?我将其放入服务器端的foreach循环中,它不会插入每条记录。我有
foreach($data['employment']作为$emp){}
foreach($data['address']作为$addr){}
和一个insert语句。你从哪里得到$data?我没有使用那个名字的变量。当你说“不插入”时,你是什么意思?您是否收到了db错误?数组是空的吗?请更具体一点,如果你不能听从建议,我帮不了你。就像我说的,只需从$u post数组中访问post数据,然后在我的答案中迭代这两个变量($address和$employers)。这就是我要做的。
$addresses = json_decode($_POST['addresses'], true);
$employers = json_decode($_POST['employers'], true);