0
Answered

Обработка проблем с сетью в jQuery плагине

Damir Bagapov 5 years ago updated 5 years ago 8
Здравствуйте!

Может ли jQuery плагин как-то сообщить об ошибке, например, в случае недоступности серверов dadata?
Чтобы в этом случае можно было дать соответствующую подсказку пользователю и по другому обработать введенный адрес?

Я конечно верю в "Неограниченное число запросов в режиме 24*7. 2 сервера в Amazon Cloud с автоматической балансировкой.", но начальство есть начальство, и оно просит рассмотреть и такой вариант с недоступностью.

Answer

Answer
Answered
Можно исходно считать, что адрес невалидный (valid = false), и делать его валидным (valid = true) только в обработчике onSelect. Если сервера Дадаты недоступны, то обработчик никогда не будет вызван, и адрес будет считаться невалидным.

Это заодно поможет в ситуации, когда подсказки работают, но пользователь ими не воспользовался, а ввел «отсебятину» вместо адреса («Рязанская область, на деревню дедушке»).
Under review
Дамир, как бы вы хотели обработать введенный адрес, если сервера Дадаты недоступны?
Сохранить с пометкой, что он не валидный, для дальнейшего уточнения
Answer
Answered
Можно исходно считать, что адрес невалидный (valid = false), и делать его валидным (valid = true) только в обработчике onSelect. Если сервера Дадаты недоступны, то обработчик никогда не будет вызван, и адрес будет считаться невалидным.

Это заодно поможет в ситуации, когда подсказки работают, но пользователь ими не воспользовался, а ввел «отсебятину» вместо адреса («Рязанская область, на деревню дедушке»).
Да, так можно решить проблему с меткой валидности данных, но как быть с подсказкой?
Изначально мы в ней пишем что-то вроде "Начните вводить адрес и затем выберите правильный из списка", а в случае ошибки "Введите полный адрес: регион, город, улицу и т.д.".
Можно конечно по таймауту менять текст подсказки, но это не очень красивое решение, мне кажется.

Например, так:
if (!$.Suggestions) {
  console.log("Подсказки недоступны");
} else {
  $address.suggestions({
    serviceUrl: "http://dadata.ru/api/v2",
    token: "${API_KEY}",
    type: "ADDRESS",
    /* Вызывается, если запрос к подсказкам вернул ошибку */
    onSearchError: function(query, jqXHR, textStatus, errorThrown) {
      console.log("Подсказки вернули ошибку: " + textStatus);
    }
  });
}
Спасибо!
Я правильно понял, первый if это как раз вариант, когда сервера недоступны, а второй это когда доступны, но произошла какая-то ошибка?
Подскажите, какой-либо таймаут установлен при ожидании ответа сервера?
Да, вы правы. Таймаут умолчательный jQuery, можно поменять через jQuery.ajaxSetup().
Спасибо за помощь!