Обычно это происходит, когда DOM не загружен и до этого ваши другие задачи завершают свою работу (в случае, если ссылка на страницу sh). Чтобы решить эту проблему без какой-либо структуры, вы можете addEventListener
.
echo '<script>';
echo 'document.addEventListener('DOMContentLoaded',function updateId(id) {';
echo 'var xmlhttp = new XMLHttpRequest();';
echo ' xmlhttp.onreadystatechange = function() {';
echo ' if (xmlhttp.readyState == 4 && xmlhttp.status == 200)';
echo ' {';
//echo ' alert(xmlhttp.responseText);';
echo ' }';
echo ' };';
echo ' xmlhttp.open("GET", "update.php?id=" +id, true);';
echo ' xmlhttp.send();';
echo 'location.reload(true);';
echo '}';
echo '});';
echo '</script>
Событие DOMContentLoaded
запускается, когда исходный HTML документ был полностью загружен и проанализирован, не дожидаясь завершения sh загрузки таблиц стилей, изображений и подфреймов.