Reputation: 26
Having a bit of an issue with a 2 dimensional array returned from an AJAX call, not sure if JSON is being parsed properly.
First the AJAX call:
$.ajax({
dataType: 'text',
url: "./inc/datadmin.php?action=getCust&id="+id,
success: function(data){
var client = JSON.parse(data);
for (var i = 0; i < client.cust.length; i++) {
var counter = client.cust[i];
console.log(counter.company_name);
alert('me');
}
)};
The return as seen in the network tab:
{
"cust":
{
"company_id":"11",
"company_name":"test",
"company_owner_name":"testo",
"company_owner_phone":"7038398608",
"company_phone":"7038398608",
"email":"[email protected]",
"ein":"EIN Test",
"mcin":"MCIN Test",
"dot_license":"DOT Test",
"ifta_license":"IFTA Test",
"ifta_exp_date":"2015-05-15",
"ky_ifta":"KY IFTA Test",
"ky_ifta_exp_date":"2015-05-13",
"nm_ifta":"NM IFTA Test",
"nm_ifta_exp_date":"2015-05-11",
"irp_license":"IRP Test",
"irp_exp_date":"2015-05-11",
"urc_license":"URC Test",
"urc_total_vehc":"URC TRUCK Test",
"urc_exp_date":"2015-05-23",
"fleet_one":"FleetOne Test"
},
"permits":
{
"company_id":"11",
"state":"IL",
"permit_number":"232",
"exp_date":"2015-05-28"
}
}
you can see the data looks ok, properly formatted, the issue, it never gets to the alert function, essentially say to me that client.cust.length has a length of 0? even though im not an advanced programmer, i can see that there should be at least 1 record for the loop.
oops forgot to add the return from the database:
$mdata = array();
$datas = $database->select("company", "*", array(
"companyId" => $_REQUEST['id']
));
foreach($datas as $data){
$mdata['cust']=array(
"company_id" => $data["companyId"],
"company_name" => $data["company_name"],
"company_owner_name" => $data["company_owner_name"],
"company_owner_phone" => $data["company_owner_phone"],
"company_phone" => $data["company_phone"],
"email" => $data["email"],
"ein" => $data["ein"],
"mcin" => $data["mcin"],
"dot_license" => $data["dot_license"],
"ifta_license" => $data["ifta_license"],
"ifta_exp_date" => $data["ifta_exp_date"],
"ky_ifta" => $data["ky_ifta"],
"ky_ifta_exp_date" => $data["ky_ifta_exp_date"],
"nm_ifta" => $data["nm_ifta"],
"nm_ifta_exp_date" => $data["nm_ifta_exp_date"],
"irp_license" => $data["irp_license"],
"irp_exp_date" => $data["irp_exp_date"],
"urc_license" => $data["urc_license"],
"urc_total_vehc" => $data["urc_total_vehc"],
"urc_exp_date" => $data["urc_exp_date"],
"fleet_one" => $data["fleet_one"],
);
}
$dataz = $database->select("permits", "*", array(
"companyId" => $_REQUEST['id']
));
foreach($dataz as $data){
$mdata['permits']=array(
"company_id" => $data["companyId"],
"state" => $data["state"],
"permit_number" => $data["permit_number"],
"exp_date" => $data["exp_date"]
);
}
echo json_encode($mdata);
So the "cust" part is working by using client.cust.company_id, but the "permits" are, i reworked the database call to:
$dataz = $database->select("permits", "*", array(
"companyId" => $_REQUEST['id']
));
$mdata['permits']=array();
$xt=1;
foreach($dataz as $data){
$mdata['permits'][$xt]['company_id'] = $data["companyId"];
$mdata['permits'][$xt]['state'] = $data["state"];
$mdata['permits'][$xt]['permit_number'] = $data["permit_number"];
$mdata['permits'][$xt]['exp_date'] = $data["exp_date"];
$xt++;
}
the data comes back like:
"permits":
{
"1":
{"company_id":"11",
"state":"CA",
"permit_number":"ertr",
"exp_date":"2015-05-12"},
"2":
{"company_id":"11",
"state":"IL",
"permit_number":"232",
"exp_date":"2015-05-28"}
}
but i keep getting undefined at alert(client.permits.length); so it never gets into:
for (var i = 0; i < client.permits.length; i++) {
var counter = client.permits[i];
console.log(counter.state);
}
Upvotes: 0
Views: 43
Reputation: 126072
cust
is an object, not an array. That object has no length
property, which is why your loop is never entered.
You can access properties on cust
directly:
alert(client.cust.company_name);
If you want to iterate over the keys of the object, you could use a for...in
loop instead.
var client = JSON.parse(data);
for (var key in client.cust) {
if (client.cust.hasOwnProperty(key)) {
alert(client.cust[key]);
}
}
Upvotes: 3