XMLHttpRequest также называется AJAX, а A означает асинхронный, когда вы вызываете .send()
запрос отправляется на сервер, но браузер не ожидает его завершения, он переходит прямо к следующей строке, которая alert(string)
и поскольку запрос еще не завершен, естественно, что он не определен.
Все запросы AJAX по своей природе являются асинхронными, что означает, что браузер никогда не ожидает завершения запроса, прежде чем перейти к следующей строке после .send
.
Теперь в вашем случае сложно построить вашу функцию, поэтому лучше удалить функцию целиком, и где бы вы ни вызывали эту функцию, просто сделайте запрос, и внутри onreadystatechanged
внутри if
у вас есть строкаделать с ним то, что вы хотите сделать (показывать пользователю, обрабатывать, что угодно).
Между прочим, существует синхронный запрос XMLHttpRequest, но он устарел и не должен использоваться, поскольку код javascript естественным образом выполняется в одном потоке, даже код пользовательского интерфейса, и вы не хотите вешать кнопки, ожидающие некоторого запроса к серверу.заканчивать.
Так это работало в FF и IE? !!это сработало по стечению обстоятельств, потому что запрос завершился, и строка оказалась заполненной.