Общее представление об AJAX. Часть 4

Отправка синхронного запроса

В большинстве случаев запросы HTTP, формируемые посредством объекта XMLHttpRequest, являются асинхронными. Именно поэтому и требуется функция обратного вызова. Но если указать логическое значение false в качестве третьего параметра метода open(), запрос станет синхронным, а это означает, что выполнение сценария приостанавливается до тех пор, пока от сервера не возвратятся данные. В следующем фрагменте кода демонстрируется отправка синхронного запроса:

<script type="text/javascript">
function syncRequest() {
  var XMLHttp = getXMLHttp();
  XMLHttp.open("GET", "sync.php", false);
  XMLHttp.send(null);
  document.getElementById("output").innerHTML =
    "Returned data: " + XMLHttp.responseText;
}

function getXMLHttp() {
  var XMLHttp = null;
  if (window.XMLHttpRequest) {
    try {
      XMLHttp = new XMLHttpRequest();
    } catch (e) { }
  } else if (window.ActiveXObject) {
    try {
      XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { }
    }
  }
  return XMLHttp;
}</script>
<p id="output"></p>
<input type="button" value="Send" onclick="syncRequest();" />

Серверный скрипт sync.php

<?php
  sleep(5);
  echo 'Server response';
?>

Как видите, синхронные вызовы гораздо удобнее с точки зрения разработчика — не нужна функция обратного вызова. Однако их следует избегать из соображений практичности и производительности. Ведь при таком вызове выполнение сценария полностью прекращается, что может превратиться в сущий кошмар при медленном соединении или большой нагрузке на сервер.

Ссылки по теме:

Оставьте свой отзыв