Здравствуйте, подскажите пожалуйста, в чём проблема? Ниже код. При нажатии на кнопку подгружается содержимое из базы данных. Но кнопка т.с. одноразовая. После первого нажатия начинают выводиться ошибки Uncaught TypeError: Cannot read property 'innerHTML' of null. Подскажите пожалуйста, где мой ляп? Код (Text): <script> function showContent(link) { var cont = document.getElementById('thumbs'); //это директорию, куда фото грузится var loading = document.getElementById('loading'); //надпись, возникающая во время загрузки cont.innerHTML = loading.innerHTML; var http = createRequestObject(); // создаем ajax-объект if( http ) { http.open('get', link); // инициируем загрузку страницы http.onreadystatechange = function () { // назначаем асинхронный обработчик события if(http.readyState == 4) { cont.innerHTML = http.responseText; // присваиваем содержимое } } http.send(null); } else { document.location = link; // если ajax-объект не удается создать, просто перенаправляем на адрес } } // создание ajax объекта function createRequestObject() { try { return new XMLHttpRequest() } catch(e) { try { return new ActiveXObject('Msxml2.XMLHTTP') } catch(e) { try { return new ActiveXObject('Microsoft.XMLHTTP') } catch(e) { return null; } } } } </script> <form> <input onclick="showContent('content_loader.php?w=3')" type="button" value="Страница 1"> // Собственно кнопки для загрузки страницы <input onclick="showContent('content_loader.php?w=1')" type="button" value="Страница 2"> </form> <ul id="thumbs"> // директория, куда грузится контент <div id="loading" style="display: none"> Идет загрузка... </div> </ul> Код content_loader.php: Код (Text): <?php $link = mysqli_connect("localhost", "root", "", "articl"); /* проверка соединения */ if (mysqli_connect_errno()) { printf("Соединение не удалось: %s\n", mysqli_connect_error()); exit(); } if (isset($_GET['w'])) { $w = $_GET['w']; $i = $i+$w; } else { $w = 0; $i = 1; }; $query = "SELECT image, alt FROM image ORDER by ID LIMIT ".$w; if ($result = mysqli_query($link, $query)) { /* извлечение ассоциативного массива */ while ($row = mysqli_fetch_assoc($result)) { /* Работа с базой данных */ printf (' <li class="item-thumbs span3 design" style="background:url('.$row["image"].');"> <a class="hover-wrap fancybox" data-fancybox-group="gallery" title="'.$title.'" href="'.$row["image"].'"'.$title.'"> <span class="overlay-img"></span> <span class="overlay-img-thumb font-icon-plus"></span></a> <img src="'.$row["image"].'" alt="'.$row["alt"].'"> </li>'); } /* удаление выборки */ mysqli_free_result($result); } /* закрытие соединения */ mysqli_close($link); ?>
Код (Text): cont.innerHTML = loading.innerHTML; лучше так: Код (Text): if(loading){ loading.style.display = 'block'; } т.к. после первой загрузки, этого элемента не станет. А ещё лучше сообщение выводить скриптом: Код (Text): cont.innerHTML = '<li>Идет загрузка...</li>'; тогда оно будет появляться всегда перед загрузкой. Код (Text): <div id="loading" style="display: none"> Идет загрузка... </div> элемент DIV лучше заменить элементом LI: Код (Text): <li id="loading" style="display: none"> Идет загрузка... </li> В content_loader.php в выражении Код (PHP): $i = $i+$w; используется не определенная ранее переменная $i. Этот скрипт вообще загружается по адресу content_loader.php?w=1 в браузер?