Вы не можете сделать это вообще для асинхронных вызовов XHR. Вы не можете заставить JavaScript «ждать» ответа HTTP от сервера; все, что вы можете сделать, это передать системе времени выполнения функцию для вызова (ваш обработчик), и она вызовет ее. Однако этот вызов будет долгое время после того, как код, который установил XHR, завершится.
Однако не все потеряно, так как эта функция-обработчик может сделать что угодно . Что бы вы ни хотели сделать с возвращаемым значением, вы можете сделать внутри обработчика (или из других функций, вызываемых из обработчика).
Таким образом, в вашем примере вы бы изменили что-то вроде этого:
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4)
{
var resp = JSON.parse(xhr.responseText);
//
// ... whatever you need to do with "resp" ...
//
}
}
}