заполнение таблицы после успешного вызова ajax массивом в javascript

#javascript #ajax

Вопрос:

Я пытаюсь заполнить таблицу результатом успешного вызова ajax. Я работаю здесь над несколькими конечными точками.

Серверная часть (PHP):

серверная часть возвращает массив.

 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(...)
)
 

Внешний вызов:

при печати result на консоль я сам вижу правильные значения.

 $("#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}amp;dateto=${dateto}amp;client=${client}`;
  console.log(link);

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

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

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

Моя попытка состояла в том, чтобы просмотреть значения результатов и заполнить таблицу с помощью:

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

Который должен работать с использованием json. Поскольку я получаю массив обратно, я явно борюсь с получением формата таким образом, чтобы он мне был нужен. При использовании json_encode() в бэкэнде я получаю экранированный файл, который выглядит как json. Мне было интересно, как я могу получить результат таким образом, чтобы я мог продолжать работать.

Любая помощь была бы очень признательна.

Ответ №1:

Я сделал это таким образом. Надеюсь, это будет полезно.

 $.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);
    }
  });
 

И мой html был таким:

 <table class="table table-bordered">
  <thead>
    <tr>
      <th> heading 1 </th>
      <th> heading 2 </th>
    </tr>
  </thead>
  <tbody id="your_table_id"></tbody>
</table>
 

Ответ №2:

Из бэкенда PHP я предложу использовать json_encode

Вот так:

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

 `
 

Затем вы получаете его из интерфейса JavaScript следующим образом:

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