За последние 24 часа нас посетили 25306 программистов и 1380 роботов. Сейчас ищут 862 программиста ...

Как принять ответ ajax jquery?

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

Метки:
  1. гендаль серый

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

    С нами с:
    20 янв 2023
    Сообщения:
    44
    Симпатии:
    0
    по замыслу из обработчика должен передаваться готовый блок комментария. в этом блоке через переменную в атрибут data блока передается id коммента плюс переменные юзера, тайтла, поста и тд..тоесть готовый блок html.
    так же должны работать все кнопки в блоке - тоесть нужно сделать что бы он добавился сразу делегированным в общий блок комментов.
    передаю черз json но что то не выходит....буду признателен если кто обьяснит детально.
    долго разбираюсь уже.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.837
    Симпатии:
    741
    Адрес:
    Татарстан
    - что конкретно не выходит?
    - где код? телепатов нема.....

    если про делегирование вопрос..... то обработчик вешайте через $('body').on(****) будет подхватывать и вновь появляющиеся
     
  3. гендаль серый

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

    С нами с:
    20 янв 2023
    Сообщения:
    44
    Симпатии:
    0
    в общем сейчас я сделал php обработчик, который подцепляет файл шаблона комментария и заносит туда из базы данные в переменные прописанные в шаблоне.
    все это дело, а это готовый блок получается комментария с данными я отсылаю на клиент и в формате json....и вот в инструментах разработчика отображается как бы комментарий, а как на страницу его вывести над другими комментариями я чет не пойму...есть общий блок всех комментов, но я не могу ни его перезагрузить ни добавить новый коммент клиенту..
    вот сейчас пробую разными методами appen html load вывести его, но не выводится..код публикую
    Код (Javascript):
    1. $(document).ready(function() {
    2.   // Обработчик отправки формы
    3.    $('.form-comment').submit(function(e) {
    4.        e.preventDefault(); // Отключение стандартного поведения отправки формы      
    5.      
    6.        let userId = "<?php echo htmlspecialchars(trim($user_id))?>";//получаем id юзера
    7.        //let postId = "<?php echo htmlspecialchars(trim($post_id))?>";//получаем id поста
    8.      
    9.        // Получение данных формы
    10.        let formData = new FormData(this);
    11.        formData.append('user_id', userId);//передаем id юзера в formdata
    12.        //formData.append('post_id', postId);//передаем id поста в formdata  
    13.      
    14.         // Отправка данных формы через Ajax
    15.         $.ajax({
    16.             url: 'обработчик комментариев.php',
    17.             timeout: 20000, // ограничение времени выполнения запроса в 20 секунд
    18.             type: 'POST',
    19.             data: formData,
    20.             processData: false,
    21.             contentType: false,
    22.             dataType: 'json',          
    23.             success: function(response) {
    24.                 if (response.success) {
    25.                     let result = JSON.parse(response.comment);//получаем комментарий
    26.                    
    27.                     // Если валидация прошла успешно, выполните необходимые действия
    28.                     $('.form-comment')[0].reset(); // Очищаем форму
    29.                     $('.post-comments').hide();//скрываем див с формой
    30.                     $('.open-commentform').show();//показываем див с кнопкой вызова формы
    31.                     //$('.all_comments').load("<?echo $url;?> .all_comments > *");//перезагружаем блок с комментариями
    32.                     $('.all_comments').html(result.comment);//добавляем комментарий
    33.  
    34.                     //$(document).delegate(".all_comments", "click", function() {
    35.                     //  $('.all_comments').prepend(response.comment);//добавляем комментарий
    36.                     //});
    37.                  
    38.                  
    39.                  
    40.                     //$.each(result, function(index, value) {
    41.                     //    $('.all_comments').prepend(comment);//добавляем комментарий
    42.                     //})
    43.                  
    44.                  
    45.                  
    46.                  
    47.                 } else {
    48.                     // Если есть ошибка, выводим ошибку
    49.                     $('.post-comments').hide();//скрываем див с формой
    50.                     $('.open-commentform').show();//показываем див с кнопкой вызова формы
    51.                     $('.info').text(response.error);//выбираем первый элемент массива errors
    52.                 }              
    53.                 // Установка таймера для скрытия сообщения через 5 секунд
    54.                 setTimeout(function() {
    55.                   $('.info').text(""); // Очистите текст блока "info"
    56.                 }, 5000); // 5000 миллисекунд = 5 секунд
    57.             },
    58.             error: function(xhr, ajaxOptions, thrownError) {
    59.                 // Обработка ошибки
    60.                 //console.log(xhr.status);
    61.                 //console.log(thrownError);
    62.             }
    63.         });
    64.     });
    65.  
    66. });
    и если раскомментировать
    // Обработка ошибки
    //console.log(xhr.status)
    //console.log(thrownError), то показывает ошибки в json -
    SyntaxError: Unexpected token '<', "<article d"... is not valid JSON
    at parse (<anonymous>).
    в php это первая строчка шаблона коммента
    PHP:
    1. <article data-id="<?echo htmlspecialchars((int)$row['comment_id']);?>" class="comment">
     
    #3 гендаль серый, 30 май 2024
    Последнее редактирование: 30 май 2024
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    296
    Симпатии:
    58
    Адрес:
    Бавария, Германия
    Добрый день!
    Попробуйте отравлять в response html-text вместо json.
    Если Вы хотите дополнять в child-элемент в начало parent-элемента с селектором '.all_comments',
    то нужно раскоментировать
    Код (Javascript):
    1.  //  $('.all_comments').prepend(response.comment);//добавляем комментарий
    В response.comment должен быть такой HTML:
    HTML:
    1. <p>
    2. <!-- добавленный комментарий -->
    3. </p>
    4. или
    5. <div>
    6. <!-- добавленный комментарий -->
    7. </div>
    см. пример здесь
    https://api.jquery.com/prepend/

    Удачи!
     
    #4 Vladimir Kheifets, 1 июн 2024
    Последнее редактирование: 1 июн 2024
  5. гендаль серый

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

    С нами с:
    20 янв 2023
    Сообщения:
    44
    Симпатии:
    0
    спасибо, будем пробовать..