Как проверить соединение с сервером, используя javaScript из родного браузера Android 2.1? - PullRequest
2 голосов
/ 07 декабря 2010

Я создаю веб-приложение, которое должно работать без сбоев, когда он подключен к сети или отключен. Для этого нужно иметь возможность проверить мое соединение с сервером .

Основными устройствами, которые должны поддерживаться, являются iphone3 + 4, ipad, нетбук с Chrome и Android 2.1+.

navigator.onLine не совсем то, что я ищу. Это ненадежно и только проверяет, есть ли у вас подключение, а не если вы подключены к определенному серверу.

Я попытался jQuery.getJSON подключиться к веб-службе ping на моем сервере. Это хорошо работает в Chrome на нетбуке, но нативный браузер Android возвращает ноль. Ipod Touch вообще ничего не делает.

Я мог бы помочь с этим ..

Ответы [ 3 ]

5 голосов
/ 07 декабря 2010

Я не совсем понимаю вашу ситуацию, но, похоже, вы должны использовать ...

$.ajax({
 url: "test.html",
 cache: false,
 async : false,
 error: function(XMLHttpRequest, textStatus, errorThrown) {
        // some error code.
        },
 success: function(html){
          // do something.
        }
});

http://api.jquery.com/jQuery.ajax/

async: false is to«заблокировать» запрос, используя test.html или любой другой простой файл (в основном мы просто пытаемся подключиться.) Вы можете использовать timeout , чтобы установить некоторый короткий период времени.

Затем посмотрите, получите ли вы ошибку или success ...

error (XMLHttpRequest, textStatus, errorThrown)

Функция, вызываемая в случае сбоя запроса.Функции передаются три аргумента: объект XMLHttpRequest, строка, описывающая тип возникшей ошибки и необязательный объект исключения, если таковой произошел.Возможные значения для второго аргумента (кроме нуля): «timeout», «error», «notmodified» и «parsererror».Это событие Ajax. Этот обработчик не вызывается для запросов JSONP, потому что они не используют XMLHttpRequest.

Если есть ошибка, запустите некоторую функцию для ее обработки, если вы получите файлназад ты готов идти.

0 голосов
/ 31 мая 2012

У меня была похожая проблема с использованием $.getJSON в веб-приложении. Он хорошо работает во многих браузерах, кроме Android. Фактически, мое приложение должно работать в автономном режиме, а затем я использую манифест, в котором файл JSON объявлен как CACHE. При начальной загрузке это работает хорошо, но при загрузке следующих страниц приложение блокируется при загрузке файла JSON.

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

Надеюсь, это поможет

0 голосов
/ 07 декабря 2010

В конце концов, это было связано с «той же политикой происхождения» (см. Комментарии).
Это было решено с помощью JSONP .

Странно то, что это выглядиткак будто я имею дело с тем же доменом, но вот код:

СТОРОНА КЛИЕНТА:
jQuery.getJSON("url?callback=?", function(data) { //Do something });

СТОРОНА СЕРВЕРА:
@RequestMapping(value="url", method=RequestMethod.GET) public void ping(HttpServletRequest request, HttpServletResponse response) throws IOException { String output = request.getParameter("callback") + "({0:1});"; response.setContentType("text/javascript"); response.getWriter().write(output); }

...