добавление комментов сделал все нормально, добавляются в блок комментариев к которому подключено делегирование событий, в каждом блоке коммента есть свой блок для ответов и вот когда приходит ответ, то пишет - Эта страница загружена в режиме Quirks. Это может повлиять на макет страницы. Для режима Standards используйте «<!DOCTYPE html>». получается не видит тег DOCTYPE в начале страницы, но при добавлении комментов такого не было и все работает обработчик на php в принципе такой же как и при добавлении главных комментов. не могу найти проблему..
https://translated.turbopages.org/p...ring-quirks-mode-on-ie8-even-with-doctype-set Согласно w3c validator у вас есть пробел перед вашим типом документа. Этого было бы достаточно, чтобы перевести IE в режим quirks.
у меня фаерфокс и в хроме не срабатывает...открывается пустая страница с кодом json объекта - тоесть ответа на коммент
Добрый день! Вы отправляете с сервера в AJAX-Response JSON, а на стороне клиента не обрабатываете JSON-object. Ответ на на коммент из JSON в HTML-техт сам не превратится. Если хотите, что бы Вам помогли, покажите коды PHP и JS. Удачи!
тоже есть подозрения на обработку ответа на клиенте...или есть мысли что переменные одинаковые в обработке комментов и ответов Код (Javascript): $(document).ready(function() { // Обработчик отправки формы $('.answer_comment').on('submit', function(e) { e.preventDefault(); let formData = new FormData(this); // Находим родительский блок комментария let comment = $(this).closest('.comment'); let answers = comment.find('.answers_to_comment'); // Отправка данных формы через Ajax $.ajax({ url: '../inner.php', timeout: 20000, method: 'POST', data: formData, processData: false, contentType: false, dataType: 'json', success: function(response) { if (response.success) { $('.answer_comment')[0].reset()//очищаем форму; $('.answerFormDiv').hide();//скрываем див с формой //comment.load('.comment-footer'); //// После перезагрузки содержимого показываем футер //comment.show('.comment-footer'); // ////Находим кнопку показа ответов внутри комментария и эмулируем клик //answers.show(); // //answers.prepend(response.answer); } else { // Если есть ошибка, выводим ошибку $('.answerFormDiv').hide();//скрываем див с формой $('.comm_info').text(response.errors); } setTimeout(function() { $('.comm_info').text(""); }, 5000); }, error: function(xhr, ajaxOptions, thrownError) { // Обработка ошибки console.log(xhr.status); console.log(thrownError); } }); }); });
У Вас вообще нет обработки ответов. Получив успешно response только "очищаем форму и скрываем див с формой". Это происходит? Если да, то необходимо получить JSON-object из response Код (Javascript): var returnedData = JSON.parse(response); console.log(returnedData); //только для отладки а затем нужно данные из returnedData вставить в предназначенный для них HTML элемент. Вообще-то с JS нужно рабираться видя HTML. Если Вы не получаете успешно response или в консоли не увидете то, что там должно быть, то нужно разбираться с inner.php и для этого его тоже неплохо бы увидеть. Удачи!
обработка ответа не нужна - из обработчика передается готовый шаблон - блок answer с вставленными в него данными из формы плюс там юзер, пост и тд. требуется только на jquery написать например answers.prepend(response.answer) и эта строчка есть ..просто закомментирована...а в консоли приходит json объект ответа..но спасибо за содействие.
если так, как Вы написали, то просто раскоментируте, а если не получится, то посмотрите, что там Код (Javascript): console.log(response.answer);
(дополнение) Попробую предположить почему "переменные" одинаковые в обработке комментов и ответов из этого Код (Javascript): // Находим родительский блок комментария let comment = $(this).closest('.comment'); let answers = comment.find('.answers_to_comment'); следует то, что у parent элемента comment д.б. child элементы с селектором ".answers_to_comment" По идеи, на один коментарий может быть несколько ответов и этому должен соответствовать, например, такой HTML HTML: <div class="comment"> <div class="answers_to_comment"></div> <div class="answers_to_comment"></div> <div class="answers_to_comment"></div> </div> Если моё предполжение верно, то Код (Javascript): let answers = comment.find('.answers_to_comment'); будет возвращать не один DOM-элемент, а NodeList. Если нужно определить один конкретной элемент из NodeList необходимо указать его индекс, например, Код (Javascript): let answers = comment.find('.answers_to_comment')[0];//первый div с селектором '.answers_to_comment' либо для определения последнего элемента из NodeList Код (Javascript): let answers = comment.find('.answers_to_comment').last();//последний div с селектором '.answers_to_comment' Удачи!
Замысел понятен. Однако, раз возник вопрос, это пока правильно не работает. comment.find('.answers_to_comment') ищет все child элементы в parent comment Можете проверить что у Вас answers Код (Javascript): let answers = comment.find('.answers_to_comment'); console.log(answers); В обработчике события submit, по идеи, должен динаммически добавляться DOM-элемент для нового ответа. Думаю, что в Вашем коде не случайно закоментированы строки. Код (Javascript): //comment.load('.comment-footer'); //// После перезагрузки содержимого показываем футер //comment.show('.comment-footer'); // ////Находим кнопку показа ответов внутри комментария и эмулируем клик //answers.show(); // //answers.prepend(response.answer);
в консоли так же выдается json блок ответа, данные все уходят и приходят на клиент, но вывод сам неправильно написан видимо..поэтому я и закомментил строчки, хотел другими способами попробовать...ну и так же написано страница загружена в режиме квиркс и просят добавить доктайп..самому интересно в чем подвох...есть мысли что делигирование подключенное к блоку в котором все комменты находятся, как то не срабатывает на внутренние блоки в самих комментах...и я тут для себя открыл что динамически добавленные блоки отсутствуют в исходном коде html страницы, я очень удивился - на странице в исходниках не оказалось вообще комментов..они загружаются при загрузке страницы тоже у меня черз ajax запрос...
Динамически добавленные блоки не могут быть в исходном коде html страницы, потому что они создаются в JS. Я могу только предпологать, что у Вас для ответа на комментарий есть один или несколько элементов FORM с селектором '.answer_comment'. В обработчике события submit, отправляется AJAX-Request. Возможно, тип response JSON, задан не верно и ответ должен отпраляться как HTML- техт. При успешом AJAX-Response в начало (новый ответ в начале) parent эдемента должен динамически добавляться элемент и определяться его контент (текст ответа). Возможно, что нужно закрывать предыдущие ответы и показывать кнопку "Показать все ответы" и прописывать для неё обработчик события click. Удачи!
Кнопка имеется на скриншоте, а в JS обработчика для неё не видно. Вы каждый раз по клику страницу перезагружаете? Между прочим ответы из предыщих сеансов должны сохраняться в БД, а в текущещем сеансе должны выбирать при разворчивание ленты ответов. Для этого должы отправляться AJAX-Request, которых в JS-коде также не видно. Удачи!