имеется страница профиля юзера, на которую при загрузке выводятся названия постов. так же сделана кнопка load_more для подгрузки через ajax. все работет нормально. но еще на странице есть кнопка комментов, по на жатию на которую появляются комменты вместо постов в том же блоке и так же должна быть подгрузка по кнопке и потом если юзер хочет посмотреть посты, то жмет на кнопку постов, которая загружает посты в блок снова. и здесь я запутался - если мы подгружаем посты например до последнего, то кнопка подгрузки исчезает и не появляется при нажатии на кнопку показа комментов. если до конца данные по какой-либо кнопке не подгружать, то кнопка load_more остается при переходе на другие данные...но и выводит посты вперемешку с комментами...подскажите может я не правильно код сделал..как надо? Код (Javascript): //если кликаем кнопку комментов, выводим комменты $(document).ready(function(){ $('.showcomments').on('click', function() { $('#post-container').empty(); //скрипт подгрузки данных для страницы профиля. подгружаем комменты и посты в историю пользователя var offset = 0; var limit = 2; var user_id = <?php echo $numid; ?>; // Функция для загрузки постов function loadComments(){ $.ajax({ url: '../ajax/profile_load_more_comments.php', method: 'POST', data: {offset: offset, limit: limit, user_id: user_id}, success: function(response){ // Добавляем загруженные посты в контейнер $('#post-container').append(response); // Увеличиваем смещение для следующей загрузки offset += limit; // Если посты закончились, скрываем кнопку "Загрузить еще" if(response.trim() == ''){ $('#load-more-btn').hide(); } } }); } // Обработчик клика на кнопку "Загрузить еще" $('#load-more-btn').click(function(){ loadComments(); }); // Загружаем первые посты при загрузке страницы loadComments(); }); }); //-------------------------------------------------------------- //если кликаем кнопку постов, выводим посты $(document).ready(function(){ $('.showposts').on('click', function() { $('#post-container').empty(); //скрипт подгрузки данных для страницы профиля. подгружаем комменты и посты в историю пользователя. изначально при загрузке, загружаем посты var offset = 0; var limit = 2; var user_id = <?php echo $numid; ?>; // Функция для загрузки постов function loadPosts(){ $.ajax({ url: '../ajax/profile_load_more_posts.php', method: 'POST', data: {offset: offset, limit: limit, user_id: user_id}, success: function(response){ // Добавляем загруженные посты в контейнер $('#post-container').append(response); // Увеличиваем смещение для следующей загрузки offset += limit; // Если посты закончились, скрываем кнопку "Загрузить еще" if(response.trim() == ''){ $('#load-more-btn').hide(); } } }); } // Обработчик клика на кнопку "Загрузить еще" $('#load-more-btn').click(function(){ loadPosts(); }); // Загружаем первые посты при загрузке страницы loadPosts(); }); }); изначально на странице срабатывает и выводит посты второй ajax запрос, он еще отдельно у меня прописан выше..сюда я его не стал включать
Добрый день! Сравнил две Ваши функции loadPosts и loadComments для сравнения использовал утилиту winMerge https://winmerge.org/downloads/?lang=ru см. скриншот ниже. Там видно, что эти функции отличаются только url. Попробуйте упростить код объеденив их в фунцию loadPostsComments(endUrl) Код (Javascript): // Функция для загрузки постов function loadPosts(){ $.ajax({ url: '../ajax/profile_load_more_posts.php', ..................... ..................... } // Функция для загрузки постов function loadComments(){ $.ajax({ url: '../ajax/profile_load_more_comments.php', ..................... ..................... } // Функции loadPosts и loadComments заменяем фукцией loadPostsComments // Функция для загрузки постов и коментариев function loadPostsComments(endUrl){ { $.ajax({ url: '../ajax/profile_load_more_' + endUrl + '.php', ..................... ..................... } И еще, досточно один раз применить $(document).ready(function(){ Код (Javascript): $(document).ready(function(){ function loadPostsComments(endUrl){ { $.ajax({ url: '../ajax/profile_load_more_' + endUrl + '.php', ..................... ..................... } ................. ................. } Удачи! --- Добавлено ---
еще не пойму почему переменные не передаются в обработчик php...если файл с ajax запросом сделать с js расширением? они же передаются в ajaxe. в обработчике принимаю через массив post PHP: $offset = $_POST['offset']; $limit = $_POST['limit'];
Добрый день! Обработчик должен быть на PHP т.к. AJAX отправляет POST-Request на сервер и затем посылает Response в Вашем случае в контейнер с id=post-container В .htaccess дерективой RewriteRule можно заставить PHP исполнять файлы с другими расширениями, но содержащими PHP код. Вам это нужно? Попробуйте вставить в файлы profile_load_more_posts.php и profile_load_more_comments.php оператор есно "myResponse" и проверить выводится ли этот текст в контейнер с id=post-container. Если не выводится, то нужно проверить не установлено у контейнера CSS свойство display:none и.т.п Затем проверить нет ли фатальных ошибок в PHP скриптах и включен ли в них error_reporting. И ещё, стоит посмотреть в консоле бразера сообщения об ошибках что-то типа POST AJAX request denied CORS... Бывает и такое, к сожалению. Удачи!