В асинхронном варианте у тебя всегда посылается null, независимо от параметров.
вообще, код подозрительный какой-то.
вот тут
async = async || false;
params = params || '';
method = method || 'GET';
У тебя пишется все в глобальную область.
Далее, зачем писать
params = params || '';
...
if (params == '') {
xmlHttp.send(null);
Если можно
var params=params||null
...
xmlHttp.send(params);
выкинтуть нахрен это ветвление.