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