За последние 24 часа нас посетили 18305 программистов и 1616 роботов. Сейчас ищет 1231 программист ...

Как выводить данные по нажатию на соответствующую кнопку?

Тема в разделе "JavaScript и AJAX", создана пользователем гендаль серый, 6 янв 2024.

  1. гендаль серый

    гендаль серый Новичок

    С нами с:
    20 янв 2023
    Сообщения:
    53
    Симпатии:
    0
    имеется страница профиля юзера, на которую при загрузке выводятся названия постов. так же сделана кнопка load_more для подгрузки через ajax. все работет нормально.
    но еще на странице есть кнопка комментов, по на жатию на которую появляются комменты вместо постов в том же блоке и так же должна быть подгрузка по кнопке и потом если юзер хочет посмотреть посты, то жмет на кнопку постов, которая загружает посты в блок снова.
    и здесь я запутался - если мы подгружаем посты например до последнего, то кнопка подгрузки исчезает и не появляется при нажатии на кнопку показа комментов. если до конца данные по какой-либо кнопке не подгружать, то кнопка load_more остается при переходе на другие данные...но и выводит посты вперемешку с комментами...подскажите может я не правильно код сделал..как надо?

    Код (Javascript):
    1. //если кликаем кнопку комментов, выводим комменты
    2. $(document).ready(function(){      
    3. $('.showcomments').on('click', function() {
    4.     $('#post-container').empty();  
    5.     //скрипт подгрузки данных для страницы профиля. подгружаем комменты и посты в историю пользователя
    6.        
    7.             var offset = 0;
    8.             var limit = 2;
    9.             var user_id = <?php echo $numid; ?>;
    10.        
    11.             // Функция для загрузки постов
    12.             function loadComments(){
    13.                 $.ajax({
    14.                     url: '../ajax/profile_load_more_comments.php',
    15.                     method: 'POST',
    16.                     data: {offset: offset, limit: limit, user_id: user_id},
    17.                     success: function(response){
    18.                         // Добавляем загруженные посты в контейнер
    19.                         $('#post-container').append(response);
    20.        
    21.                         // Увеличиваем смещение для следующей загрузки
    22.                         offset += limit;
    23.        
    24.                         // Если посты закончились, скрываем кнопку "Загрузить еще"
    25.                         if(response.trim() == ''){
    26.                             $('#load-more-btn').hide();
    27.                         }
    28.                     }
    29.                 });
    30.             }
    31.        
    32.             // Обработчик клика на кнопку "Загрузить еще"
    33.             $('#load-more-btn').click(function(){
    34.                 loadComments();
    35.             });
    36.        
    37.             // Загружаем первые посты при загрузке страницы
    38.             loadComments();
    39.        
    40.   });
    41. });
    42.  
    43. //--------------------------------------------------------------
    44. //если кликаем кнопку постов, выводим посты
    45. $(document).ready(function(){
    46. $('.showposts').on('click', function() {
    47.     $('#post-container').empty();
    48.     //скрипт подгрузки данных для страницы профиля. подгружаем комменты и посты в историю пользователя. изначально при загрузке, загружаем посты
    49.        
    50.             var offset = 0;
    51.             var limit = 2;
    52.             var user_id = <?php echo $numid; ?>;
    53.        
    54.             // Функция для загрузки постов
    55.             function loadPosts(){
    56.                 $.ajax({
    57.                     url: '../ajax/profile_load_more_posts.php',
    58.                     method: 'POST',
    59.                     data: {offset: offset, limit: limit, user_id: user_id},
    60.                     success: function(response){
    61.                         // Добавляем загруженные посты в контейнер
    62.                         $('#post-container').append(response);
    63.        
    64.                         // Увеличиваем смещение для следующей загрузки
    65.                         offset += limit;
    66.        
    67.                         // Если посты закончились, скрываем кнопку "Загрузить еще"
    68.                         if(response.trim() == ''){
    69.                             $('#load-more-btn').hide();
    70.                         }
    71.                     }
    72.                 });
    73.             }
    74.        
    75.             // Обработчик клика на кнопку "Загрузить еще"
    76.             $('#load-more-btn').click(function(){
    77.                 loadPosts();
    78.             });
    79.        
    80.             // Загружаем первые посты при загрузке страницы
    81.             loadPosts();
    82.        
    83.         });
    84.   });
    изначально на странице срабатывает и выводит посты второй ajax запрос, он еще отдельно у меня прописан выше..сюда я его не стал включать
     
  2. гендаль серый

    гендаль серый Новичок

    С нами с:
    20 янв 2023
    Сообщения:
    53
    Симпатии:
    0
    сейчас гуглю, вроде все это делается проще и не так громоздко..)
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!

    Сравнил две Ваши функции loadPosts и loadComments
    для сравнения использовал утилиту winMerge
    https://winmerge.org/downloads/?lang=ru
    см. скриншот ниже.
    Там видно, что эти функции отличаются только url.
    Попробуйте упростить код объеденив их в фунцию loadPostsComments(endUrl)
    Код (Javascript):
    1. // Функция для загрузки постов
    2.   function loadPosts(){
    3.   $.ajax({
    4.   url: '../ajax/profile_load_more_posts.php',
    5.   .....................
    6.   .....................
    7.   }
    8.  
    9. // Функция для загрузки постов
    10.   function loadComments(){
    11.   $.ajax({
    12.   url: '../ajax/profile_load_more_comments.php',
    13.   .....................
    14.   .....................
    15.   }
    16.  
    17.  
    18. // Функции loadPosts и loadComments заменяем фукцией loadPostsComments
    19. // Функция для загрузки постов и коментариев
    20.   function loadPostsComments(endUrl){
    21.   {
    22.   $.ajax({
    23.   url: '../ajax/profile_load_more_' + endUrl + '.php',
    24.   .....................
    25.   .....................
    26.  
    27.   }
    И еще, досточно один раз применить $(document).ready(function(){
    Код (Javascript):
    1. $(document).ready(function(){
    2.   function loadPostsComments(endUrl){
    3.   {
    4.   $.ajax({
    5.   url: '../ajax/profile_load_more_' + endUrl + '.php',
    6.   .....................
    7.   .....................
    8.  
    9.   }
    10.   .................
    11.   .................
    12. }
    Удачи!
    --- Добавлено ---
    Screenshot 2024-01-06 134225.jpeg
     
    #3 Vladimir Kheifets, 6 янв 2024
    Последнее редактирование: 6 янв 2024
  4. гендаль серый

    гендаль серый Новичок

    С нами с:
    20 янв 2023
    Сообщения:
    53
    Симпатии:
    0
    спасибо, будем разбираться
     
  5. гендаль серый

    гендаль серый Новичок

    С нами с:
    20 янв 2023
    Сообщения:
    53
    Симпатии:
    0
    еще не пойму почему переменные не передаются в обработчик php...если файл с ajax запросом сделать с js расширением?
    они же передаются в ajaxe.
    в обработчике принимаю через массив post
    PHP:
    1. $offset = $_POST['offset'];
    2. $limit = $_POST['limit'];
     
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    Обработчик должен быть на 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...
    Бывает и такое, к сожалению.
    Удачи!
     
    #6 Vladimir Kheifets, 8 янв 2024
    Последнее редактирование: 8 янв 2024
  7. гендаль серый

    гендаль серый Новичок

    С нами с:
    20 янв 2023
    Сообщения:
    53
    Симпатии:
    0
    myResponse выводится нормально, похоже это я что то не так делаю