setTimeout(this, 20000);
не работает, this
относится к объекту jquery в этом контексте, а не к функции. Проверьте консоль javascript, и вы увидите ошибку.
Вам не нужно clearTimeout
делать отдельный вызов ajax. Более того, ваш вызов может не работать, потому что вы ссылаетесь на переменную timer
, которая имеет идентификатор тайм-аута от first вызова до setTimeout
, но любой последующий вызов вернет новый идентификатор. Поэтому вам нужно добавить в updateMsg
присваивание переменной: timer = setTimeout(updateMsg,20000);
.
Если ваш исходный код выполняется в блоке $()
, отдельном от updateMsg
, таймер будет виден только в этом блоке, и изменение этого значения в updateMsg
не будет иметь эффекта, что является другой проблемой. Если это так, либо сделайте timer
глобальным, либо присоедините его к глобальному объекту, либо поместите updateMsg
в этот блок $()
.
Наконец, вы все равно должны использовать setInterval
вместо того, чтобы каждый раз вспоминать setTimeout
, для этого он и создан.