У меня недостаточно представителей, чтобы комментировать, но в отношении ответа Кинлана на XMLHttpRequest:
Мне это показалось очень полезным, но я заметил, что следует ждать readyState == 4 (не 2).
Отлично сработало для меня и, похоже, должно быть надежным.