Насчет ajax-запросов, посоветую fetch API. Это встроенная в javascript функциональность, которая позволяет делать запросы на бэкенд. 
Документация
Пример:
fetch('http://твой-url/', {
   // Параметры ниже не обязательны, по умолчанию метод GET
   method: 'POST', // любой твой метод
   mode: "cors", // no-cors, cors, *same-origin
   cache: "no-cache",  // *default, no-cache, reload, force-cache, only-if-cached
   credentials: "same-origin", // include, *same-origin, omit
   headers: {
      // Здесь твои заголовки
      "Content-Type": "application/json",
   },
   // Тут тело запроса с информацией, которую отправляешь серверу, переменная data – javascript-объект
   body: JSON.stringify(data)
})
.then(response => {
   // Тут пиши что делаешь после выполнения запроса
})
.catch(error => {
   // Тут пиши обработку возникшей ошибки, пример ниже:
   console.log(error);
})