Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2018, 09:56
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Ошибки отсутствия сзязи с сервером
Добрый день. Страница сайта обновляется с помощью ajax запросов, когда связь с сервером прерывается(например на тех обслуживание) сыпятся такие ошибки:

GET 503 (Service Unavailable);
AJAX 503 (Service Unavailable);
GET net::ERR_CONNECTION_REFUSED;
AJAX net::ERR_CONNECTION_REFUSED;
AJAX 500 (Internal Server Error);

Например код выглядит так:
function update (){
      $.ajax({
            type: 'ajax',
            url: 'путь к файлу',
            dataType: 'json',
            success: function(data){
                    //работа с data
            },
            error: function(){
                console.log('error');
            }
      });
}
setInterval(function() {
        update ()
    }, 1000);


Как дописать в функции update() например :
function update (){
   if(есть связь с сервером){
       $.ajax({
            type: 'ajax',
            url: 'путь к файлу',
            dataType: 'json',
            success: function(data){
                   //работа с дата
            },
            error: function(){
                console.log('error');
            }
        });
   } else{
      console.log('Нет связи с сервером');
   }
}
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2018, 10:13
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Artur_Hopf,

Вам что, стандартной обработки ошибок недостаточно?
error: function(xhr, status, error) {
        // handle error
    }
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2018, 10:32
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Dilettante_Pro,
И как мне написать? :
error: function(xhr) {
        (xhr.status == 503) ? не выполнять запрос : выполнять запрос;
}

Последний раз редактировалось Artur_Hopf, 20.04.2018 в 11:08.
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2018, 11:23
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Dilettante_Pro,
Есть функция statusCode, если она вызвала 503 то как остановить дальнейшее выполнение опроса?
$.ajax({
        statusCode: {
                503: function(){
                }
            },
            type: 'ajax',
            url: 'путь к файлу',
            dataType: 'json',
            success: function(data){
                   //работа с дата
            }
        });
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2018, 11:30
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Artur_Hopf,
Запрос не смог выполниться, прервался и вернул ошибку. Он уже остановлен.
Ответить с цитированием
  #6 (permalink)  
Старый 20.04.2018, 11:49
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Dilettante_Pro,
В целом понял спасибо. Просто если с сервером нет связи продолжительное время, то у клиента все виснет и не обновляется даже после появления связи с сервером. Наверное в сторону php копать.
Ответить с цитированием
  #7 (permalink)  
Старый 20.04.2018, 11:49
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от Artur_Hopf
как остановить дальнейшее выполнение опроса
Вы имеете в виду, как прервать цикл setInterval? сделайте setInterval с именем и по нужному коду останавливайте его.
Кстати, ошибка 503 может возникать по той причине, что вы слишком часто посылаете запросы.
Ответить с цитированием
  #8 (permalink)  
Старый 20.04.2018, 11:55
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от Artur_Hopf
если с сервером нет связи продолжительное время, то у клиента все виснет
Это, наверное, по той причине, что сервер не отвечает, а setInterval посылает все новые и новые запросы.
Можно посылать новые запросы не по setInterval, а из разделов success или error - Тогда, пока запрос не остановился, новый не отправится.
Ответить с цитированием
  #9 (permalink)  
Старый 20.04.2018, 11:56
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Dilettante_Pro,
Нет, просто во время тех обслуживания сервера появляются проблемы, пытался решить остановом ajax запроса пока сервер недоступен. Вроде как setInterval не останавливать, а просто прекращать выполение ajax запроса, например вот так:
var stop;
function update (){
  if(stop)
      $.ajax({
            type: 'ajax',
            url: 'путь к файлу',
            dataType: 'json',
            success: function(data){
                    //работа с data
            },
            error: function(){
               stop = false;
            }
      });
}

Но если так прерывать ajax запрос, то при включении сервера ajax запрос не начнет работу.
Должно быть просто решение, но не могу его найти.
Ответить с цитированием
  #10 (permalink)  
Старый 20.04.2018, 12:18
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

В вашем способе по ошибке stop = false; и никогда больше не становится true

У ajax есть параметр
Цитата:
timeout:integer
Время ожидания ответа от сервера. Задается в в миллисекундах. Если это время будет превышено, запрос будет завершен с ошибкой и произойдет событие error (см. описание выше), которое будет иметь статус "timeout".
Время отсчитывается с момента вызова функции $.ajax. Может случиться так, что в этот момент будет запущено несколько других запросов и браузер отложит выполнение текущего запроса. В этом случае timeout может завершиться, хотя фактически, запрос даже еще не был запущен.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки js блокируют работу виджета jmullins Общие вопросы Javascript 3 26.10.2015 20:28
Ошибки верстки, едет верстка в IE9 Sanu0074 (X)HTML/CSS 3 01.04.2015 08:33
генерация и логирование ошибки Hapson Общие вопросы Javascript 31 03.04.2014 17:20
Ошибки при асинхронных AJAX запросах San4ezy Общие вопросы Javascript 4 27.03.2014 21:48
загрузка файла через скрытый iframe и потеря связи с сервером vahrusha AJAX и COMET 5 01.06.2011 14:43