Общее представление об AJAX. Часть 4
Отправка синхронного запроса
В большинстве случаев запросы HTTP, формируемые посредством объекта XMLHttpRequest, являются асинхронными. Именно поэтому и требуется функция обратного вызова. Но если указать логическое значение false в качестве третьего параметра метода open(), запрос станет синхронным, а это означает, что выполнение сценария приостанавливается до тех пор, пока от сервера не возвратятся данные. В следующем фрагменте кода демонстрируется отправка синхронного запроса:
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
sleep(5);
echo 'Server response';
?>
Как видите, синхронные вызовы гораздо удобнее с точки зрения разработчика — не нужна функция обратного вызова. Однако их следует избегать из соображений практичности и производительности. Ведь при таком вызове выполнение сценария полностью прекращается, что может превратиться в сущий кошмар при медленном соединении или большой нагрузке на сервер.
Ссылки по теме:
Оставьте свой отзыв