JLongBeard
JLongBeard

Reputation: 26

json_encode returning results that I cannot parse in jQuery AJAX call

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

Answers (1)

Andrew Whitaker
Andrew Whitaker

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

Related Questions