0

I'm trying to fill a table with the result of a successful ajax call. I work on multiple endpoints here.

Backend (PHP):

the backend returns an Array.

Array ( 
    [0] => Array ( 
       [eid] => 5060529 
       [uid] => 494 
       [created] => 2020-11-10T14:23:33.903 
       [persnr] => 001354 
       [contractnr] => V-00019 
       [agentnr] => OL-010 
       [location] => 1 
       [client] => 1015 
       [validfrom] => 2020-12-01T00:00:00 
       [validto] => 2020-12-31T00:00:00 
       [isborrowed] => 1 
       [calweek] => 
       [year] => 
    )
   [n] => Array(...)
)

Frontend Call:

when printing the result to the console I see the correct values itself.

$("#contractDetailBtn").on('click', function(){
  let datefrom = $('input#datefrom').val();
  let dateto = $('input#dateto').val();
  let client = $('input#client').val();

  let link = `/backend/lnk?datefrom=${datefrom}&dateto=${dateto}&client=${client}`;
  console.log(link);

  $.ajax({
    type: 'GET',
    datatype: 'html',
    url: link,

    success: function(result){
      var table = $("#ajaxpopulate tbody");

      console.log(result);
      
    }
  });
});

My try was to loop through the result values and populate the table using:

$.each(result, function(i, e){
  table.append("<tr><td>"+e.eid+"</td><td>"+e.uid+"</td><td>"+e.created+"</td></tr>");
});

Which should work using json. Since I'm getting an array back I'm aparently struggeling with getting the format in a way I'd need it to. When using json_encode() in the backend I'm getting an escaped what looks to be json back. I was wondering, how I can get the result in a way I can continue to work with.

Any help would be very appreciated.

2 Answers 2

1

I did it this way. Hope this is helpful.

$.ajax({
    url: '/your_api',
    type: 'get',
    success: function (response) {         
      var table_data = '';
      $('#your_table_id').empty();

      for(var i = 0; i<response.length;i++) {
       table_data += '<tr>';
       table_data += '<td>' + i + '</td>';
       table_data += '<td class="text-wrap">' + response[i].firstName + " " + response[i].lastName + '</a></td>'
       table_data += '</tr>'; 
      }

      $('#your_table_id').append(table_data);
    }
  });

And my html was this:

<table class="table table-bordered">
  <thead>
    <tr>
      <th> heading 1 </th>
      <th> heading 2 </th>
    </tr>
  </thead>
  <tbody id="your_table_id"></tbody>
</table>
Sign up to request clarification or add additional context in comments.

Comments

0

From the PHP backend I'll suggest using json_encode

Like so:

`
$result =  array( 
[0] => Array ( 
   [eid] => 5060529 
   [uid] => 494 
   [created] => 2020-11-10T14:23:33.903 
   [persnr] => 001354 
   [contractnr] => V-00019 
   [agentnr] => OL-010 
   [location] => 1 
   [client] => 1015 
   [validfrom] => 2020-12-01T00:00:00 
   [validto] => 2020-12-31T00:00:00 
   [isborrowed] => 1 
   [calweek] => 
   [year] => 
    )
   [n] => Array(...)
    );

   echo  json_encode("data" => $result);

 `

Then you get it from the JavaScript frontend like so:

   success: function(result){
     var data = JSON.parse(result);
     // OR
     var data = JSON.parse(result.data);
     var table = $("#ajaxpopulate tbody");
      // then
      console.log(data.data);
     }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.