Для начала сакцентирую ваше внимание, что запросы могут быть синхронными (в таком случае скрипт будет ждать результата выполнения запроса и , как следствие, приостановит работу сайта или частью чего он там является) и асинхронными (и в таком случае никаких зависаний не будет, как будто скрипт работает в отдельном потоке).

Синхронный запрос выполняется так

 


var xmlhttp;
try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
  try {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  catch (E) {
    xmlhttp = false;
  }	
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}

var data = '?id=' + id + '&hash=' + h;
xmlhttp.open('GET', 'getdata.php' + data, false);
xmlhttp.send(null);
if(xmlhttp.status == 200 ) {
  if ( xmlhttp.responseText != "" ) {
    var place = document.getElementById("data");
    data.innerHTML = xmlhttp.responseText;
  }
}

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

var data = '?id=' + id + '&hash=' + h;
xmlhttp.open('GET', 'getdata.php' + data, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
    if(xmlhttp.status == 200 ) {
      if ( xmlhttp.responseText != "" ) {
        var place = document.getElementById("data");
        data.innerHTML = xmlhttp.responseText;
      }
    }
  }
}
xmlhttp.send(null);

 

Обратите внимание, что в данном примере пропущена часть определяющая объект xmlhttp (вы можете взять код этого определения из предыдущего примера).

POST-запросы выполняются точно также, отличия только в том, что:

1) вместо метода GET нужно использовать POST (замените служебное слово GET на POST)

2) обязательно укажите тип передаваемых данные

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

3) в строке определения данных (var data = '?id='....) уберите вопросительный знак (?)

4) строку

xmlhttp.open('GET', 'getdata.php' + data, true);

привести к виду

xmlhttp.open('POST', 'getdata.php', true);

5) в строке отправки запроса (xmlhttp.send(null);) вместо null поставьте отправляемые данные (xmlhttp.send(data);) и переместите её перед строкой условия ожидания статуса

В итоге код должен получиться примерно такой

xmlhttp.open('POST', 'index.php', true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.send(data);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
    if(xmlhttp.status == 200 ) {
      if ( xmlhttp.responseText != "" ) {
        // Какие-то дейсвия
      }
    }
  }
}

Примеры рабочие, пользуйтесь наздоровье.