Запрос AJAX с 3 URL-адресов для заполнения одной и той же таблицы

#javascript #jquery #ajax #sharepoint #datatables

#javascript #jquery #ajax #sharepoint #таблицы данных

Вопрос:

Возможно ли иметь 3 разных запроса AJAX, и чтобы все они заполнялись в одну и ту же таблицу данных? Я пытался создать AJAX с несколькими URL-адресами, и это не сработало, но когда я использовал только один URL-адрес, он работает нормально. Проблема в том, что мне нужно извлекать из трех разных дочерних сайтов.

Вот мой код:

 $(document).ready(function() {
  $('#myTable').DataTable({
    'ajax': {
      'url': "_api/web/lists/getbytitle('XDeliverables')/items?$select=Program, Deliverable, To, Date, Approved, Notes",
      'headers': { 'Accept': 'application/json;odata=nometadata' },
      'dataSrc': function(data) {
        return data.value.map(function(item) {
          return [
            item.Program,
            item.Deliverable,
            item.To,
            item.Date,
            item.Approved,
            item.Notes
          ];
        });
      }
    },
    columnDefs: [{
     
    }]
  });
});
  

Возможно ли сделать что-то вроде: (или, по крайней мере, что-то подобное)

 $(document).ready(function() {
  $('#myTable').DataTable({
    'ajax': {
      'url': "_api/web/lists/getbytitle('XDeliverables')/items?$select=Program, Deliverable, To, Date, Approved, Notes",
      'headers': { 'Accept': 'application/json;odata=nometadata' },
      'dataSrc': function(data) {
        return data.value.map(function(item) {
          return [
            item.Program,
            item.Deliverable,
            item.To,
            item.Date,
            item.Approved,
            item.Notes
          ];
        });
      }
    },
    'ajax': {
      'url': "_api/web/lists/getbytitle('YDeliverables')/items?$select=Program, Deliverable, To, Date, Approved, Notes",
      'headers': { 'Accept': 'application/json;odata=nometadata' },
      'dataSrc': function(data) {
        return data.value.map(function(item) {
          return [
            item.Program,
            item.Deliverable,
            item.To,
            item.Date,
            item.Approved,
            item.Notes
          ];
        });
      }
    },
    'ajax': {
      'url': "_api/web/lists/getbytitle('ZDeliverables')/items?$select=Program, Deliverable, To, Date, Approved, Notes",
      'headers': { 'Accept': 'application/json;odata=nometadata' },
      'dataSrc': function(data) {
        return data.value.map(function(item) {
          return [
            item.Program,
            item.Deliverable,
            item.To,
            item.Date,
            item.Approved,
            item.Notes
          ];
        });
      }
    },
    columnDefs: [{
     
    }]
  });
});
  

Ответ №1:

Вы могли бы выполнять вызовы ajax отдельно и объединять результаты вместе, а затем создавать datatable

Сначала создайте функцию со всеми вашими вызовами ajax

 async function getTableData() {
let baseURL = "_api/web/lists/getbytitle('${type}')/items?$select=Program, Deliverable, To, Date, Approved, Notes"

let tempURL = baseURL.replace("${type}", "XDeliverables");
let response1 = await $.ajax({
  url: tempURL,
  headers: { 'Accept': 'application/json;odata=nometadata' }
});

tempURL = baseURL.replace("${type}", "YDeliverables");
let response2 = $.ajax({
  url: tempURL,
  headers: { 'Accept': 'application/json;odata=nometadata' }
});

tempURL = baseURL.replace("${type}", "ZDeliverables");
let response3 = $.ajax({
  url: tempURL,
  headers: { 'Accept': 'application/json;odata=nometadata' }
});

let dataSet = [...response1, ...response2, ...response3];

// call function that creates the datatable
initializeTable(dataSet);

};
  

Затем просто инициализируйте таблицу с данными

 function initializeTable(dataSet) {

    $('#myTable').DataTable( {
        data: dataSet,
        columns: [
            { title: "Name" },
            { title: "Position" },
            { title: "Office" },
            { title: "Extn." },
            { title: "Start date" },
            { title: "Salary" }
        ]
    });
};
  

Некоторые документы.

асинхронный / ожидающий

Js source DataTable

Комментарии:

1. Что такое «$ {type}» часть baseUrl.replace («$ {type}», «XDeliverables»);

2. Я заметил, что строка URL изменилась только в этом сегменте, поэтому я установил переменную baseUrl в начале функции (это только я, мне нравится структурировать код таким образом). Функция replace() не изменяет исходную строку. Но если у вас возникли проблемы с этим, просто укажите полный путь в вызове ajax. функция замены