PageUp
@PageUp
Default

Почему не работает функция Ajax?

GET запрос в консоли видно со всеми новыми параметрами, включая и ajax=true.
В нем заголовок, содержимое новой страницы, код ответа ОК 200.
Сообщений об ошибках в консоли тоже нет.
Но в браузере контент не обновляется.
Если сделать логирование, то из сообщений приходит только первое here1, что идет до вызова основной функции.
Все остальные сообщения в консоли не появляются.
До этого писал более примитивную функцию обновления контента, она криво косо, но работала. Там через время глюки с кэшированием истории возникали. Тут функция уже доработанная с учетом истории, но почему-то не хочет работать.
В чем может быть проблема?
Помогите, кто хорошо разбирается в AJAX.

<script>
        $(document).on("click", "a", function(evt) {
          evt.preventDefault();

          var redirect_url = $(this).attr('href');
          console.log("here1");
          $.ajax({
            'url': $(this).attr('href'),
            cache: false,
            data: {
              ajax: true
            },
            dataType: "json",
            success: function(json) {
              console.log("here");
              if (json.redirect) {
                if (json.load_html) {
                  // Если доступен API истории  
                  if (!(typeof history.pushState === 'undefined')) {
                    history.pushState({
                        url: redirect_url,
                        title: document.title
                      },
                      document.title, // Можно также использовать json.title для установки заголовка предыдущей страницы на сервере
                      redirect_url
                    );
                  }
                  console.log("3");
                  document.open();
                  document.write(json.html);
                  document.close();
                } else {
                  console.log("2");
                  window.location = redirect_url;
                }
              } else {
                console.log("1");
                $('#content').html(json.message);
              }
              console.log(json.html);
            },
          });
          return false; //что бы не выполнять переход дефолтный

        });
      </script>


PS.
Может ли ошибка быть в сессии, которая передается в ссылках?: r='.$r.'&amp;'.SID.''
JSON возвращает конец ссылки как: r=88&&ajax=true&_=1674977127135
Номер сессии всегда передается в коде, но он не виден в адресной строке.
А здесь JSON с номером сессии.
Концовки ссылок с GET параметрами в json, из консоли:
&r=88&&ajax=true&_=1674977127137
&r=88&&ajax=true&_=1674977127138
&r=88&&ajax=true&_=1674977127139	
&r=88&&ajax=true&_=1674977127140
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
delphinpro
@delphinpro
frontend developer
В нем заголовок, содержимое новой страницы, код ответа ОК 200.

Должно быть не содержимое, а json.
Вы кроме success() добавьте метод error() в обработчик, и выводите его сообщения ошибок тоже.
То есть вы указали что в ответ должен прийти json dataType: "json",, а приходит обычный html-текст. Jquery спотыкается при попытке распарсить ответ как json и кидает ошибку. Метод success при этом не вызывается.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы