Полный цикл в digital

AJAX в jQuery

Сегодня технология AJAX используется практически на всех ресурсах интернета. Спектр её применения необычайно широк и технологичен. Основная задача AJAX это обмен данными между сайтом и сервером без традиционной перезагрузки страницы.

GET запрос

Нам нужно обратиться к файлу test.php с парамертром testdata и значением test и получить ответ сервера:

$.ajax({
  // куда пойдет запрос
  url: "/test.php",
  // метод передачи
  method: "get",
  // тип данных в ответе (xml, json, script, html)
  dataType: "html",
  // параметры передаваемые в запросе
  data: { testdata: "test" },
  // функция которая будет выполнена после успешного запроса
  success: function (data) {
    // в переменной data содержится ответ от test.php
    alert(data);
  },
});

Тоже самое, используя сокращенный метод:

$.get('/test.php', {testdata: 'Test'}, function(data){
    alert(data);
});

Запросы могут кэшироваться браузером или сервером, чтобы этого избежать нужно добавить в функцию параметр cache: false:

$.ajax({
  url: "/test.php",
  method: "get",
  cache: false,
});

POST запрос

$.ajax({
  url: "/test.php",
  method: "post",
  dataType: "html",
  data: {testdata: 'test'},
  success: function (data) {
    alert(data);
  },
});

Тоже самое, используя сокращенный метод:

$.post("/test.php", { testdata: "Test" }, function (data) {
  alert(data);
});

POST запросы ни когда не кэшируются.

Отправка формы

При отправке формы применяется функция serialize(), она обходит форму и собирает названия и заполненные пользователем значения полей, возвращает данные в виде массива:

{login: 'ЗНАЧЕНИЯ_ПОЛЯ', password: 'ЗНАЧЕНИЯ_ПОЛЯ'}

serialize можно применить только к тегу form и полям формы:

html<div class="form_container">
  <div id="message"></div>
    <form id="form">
    <input type="text" name="login">
    <input type="text" name="password">
    <input type="submit" name="send" value="Отправить">
    </form>
</div>
js$("#form").on("submit", function(){
  $.ajax({
    url: '/handler.php',
    method: 'post',
    dataType: 'html',
    data: $(this).serialize(),
    success: function(data){
      $('#message').html(data);
    }
  });
});
phpif (empty($_POST['login'])) {
  echo 'Укажите логин';
} elseif (empty($_POST['password'])) {
  echo 'Укажите пароль';
} else {
  echo 'Авторизация...';
}

Отправка HTTP заголовков

Через AJAX можно отправить заголовки HEAD, они указываются в параметре headers:

$.ajax({
  url: "/index.php",
  method: "get",
  dataType: "html",
  headers: { Token_value: 123 },
  success: function (data) {
    console.dir(data);
  },
});

В PHP они будут доступны в массиве $_SERVER, ключ массива переводится в верхний регистр с приставкой HTTP_:

<?php
// 123
echo $_SERVER['HTTP_TOKEN_VALUE'];

Обработка ошибок

Через параметр error задается callback функция, которая будет вызвана в случаи если запрашиваемый ресурс отдал 404, 500 или другой код:

$.ajax({
  url: "/index.php",
  method: "get",
  dataType: "json",
  success: function (data) {
    console.dir(data);
  },
  error: function (jqXHR, exception) {
    if (jqXHR.status === 0) {
      alert("Not connect. Verify Network.");
    } else if (jqXHR.status == 404) {
      alert("Requested page not found (404).");
    } else if (jqXHR.status == 500) {
      alert("Internal Server Error (500).");
    } else if (exception === "parsererror") {
      alert("Requested JSON parse failed.");
    } else if (exception === "timeout") {
      alert("Time out error.");
    } else if (exception === "abort") {
      alert("Ajax request aborted.");
    } else {
      alert("Uncaught Error. " + jqXHR.responseText);
    }
  },
});

Синхронный запрос

По умолчанию запросы выполняются асинхронно. Это значит что, запрос не задерживает выполнение программы пока ждет результатов, а работает параллельно. Чтобы включить синхронный режим нужно добавить параметр async: false:

var text = "";
$.ajax({
  url: "/index.php",
  method: "get",
  dataType: "html",
  async: false,
  success: function (data) {
    text = data;
  },
});
// в переменной будет результат из index.php
alert(text);

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг