javascript / dashcode: проверить подключение к интернету - PullRequest
2 голосов
/ 04 декабря 2009

Я занимаюсь разработкой виджета, который извлекает данные из Интернета через ajax, и я хочу предоставить сообщение об ошибке, если виджет не может подключиться к серверу. Я делаю запрос с ajax-объектом jquery, который предоставляет функцию обратного вызова с ошибкой, но он не вызывается, когда нет подключения к Интернету, только если запрос выполнен, но не выполнен по другим причинам.

Теперь, как я могу проверить, подключен ли компьютер к Интернету?

Ответы [ 5 ]

3 голосов
/ 13 января 2010

Всего одна строка

if(window.navigator.onLine)
{
// You are connected to internet
}
else
{
// You are not connected to internet
}

window.navigator.onLine возвращает true или false.

Протестировано на IE 8 и Mozilla Firefox 3.5.7. Пожалуйста, проверьте другие старые браузеры.

3 голосов
/ 04 декабря 2009

в вашей функции ошибки, вторым аргументом является статус, проверьте, не показывает ли это == "тайм-аут", если это так, вы не смогли подключиться к веб-сервису (или к чему бы то ни было), независимо от того, вы есть доступ в интернет или нет, я полагаю, это то, что вас волнует.

$.ajax({
   /* your other params here*/
   error: function (req, status, error) {
      if(status == "timeout") alert("fail!");
   },
   timeout: 2000 //2 seconds
});

См. Разделы по таймауту и ​​ошибке здесь .

3 голосов
/ 04 декабря 2009

ОБНОВЛЕНИЕ : Поскольку вы создаете виджет Dashboard, я провел несколько тестов.

Я обнаружил, что вызов $.ajax фактически вызвал ошибку, когда не было подключения к интернету. Поэтому я с большим успехом занялся созданием объекта XMLHTTPRequest вручную. Если вам нужен синтаксический анализ JSON, я предлагаю также включить json2.js парсер.

Что я сделал, чтобы сделать эту работу:

  1. В Атрибуты виджета в Dashcode Я нажал «Разрешить доступ к сети» (Если вы не используете Dashcode, проверьте документы для правильной настройки plist, чтобы включить это)
  2. Я использовал следующий код:
var xhr = new XMLHttpRequest();
xhr.addEventListener('readystatechange', state_change, true);
xhr.open("GET", url, true);
xhr.send(null);

function state_change(){
   if(xhr.readyState == 4){
        if(xhr.status == 200){
          console.log('worked'); // Only works if running in Dashcode
          // use xhr.responseText or JSON.parse(xhr.responseText)
        } else if(xhr.status == 0) {
          console.log('no internet'); // Only works if running in Dashcode
        } else {
          // Some other error
        } 
   }
}

/ Окончание обновления

Я ответил на это, отредактировав свой ответ на ваш оригинальный вопрос , так как вы задали его в комментариях. После комментирования я увидел, что вы разместили этот вопрос.

Чтобы подвести итог, добавьте параметр timeout к вашему вызову $.ajax и установите для него меньшее число (например, 5000 миллисекунд). Ваша функция ошибки будет вызвана после истечения времени ожидания запроса.

2 голосов
/ 11 января 2010

Вы можете просто написать его стандартным, легким для понимания кодом JavaScript. Я не разработал никаких «виджетов», просто интернет-приложения для iphone, но он все равно должен работать. Вот, пожалуйста:

var online = window.navigator.onLine;
if (!online){
    alert('You are not currently connected to the internet. Please try again later.');
}

-Connor

1 голос
/ 04 декабря 2009

Одна идея ...

Установите таймер JavaScript. Если вызов ajax успешен, очистите таймер. Если таймер срабатывает, это означает, что запрос не выполнен.

В качестве примечания ...

Трудно сказать, есть ли компьютер в интернете, потому что для большинства компьютеров интернет начинается с коммутатора >> маршрутизатора >> модема >> маршрутизатора >> и т. Д. Где он «сломан», обычно несколько прыгает, и единственный способ (я знаю), чтобы узнать, если вы онлайн, это «попробовать».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...