Javascript IP-адрес вопрос, что делать, если не удается загрузить / нет подключения к Интернету - PullRequest
0 голосов
/ 23 октября 2010

У меня есть код, если я дома;он будет отображаться во всплывающем окне, говоря, что если вы дома.Если вы не дома, появится всплывающее окно с сообщением, что вы не дома.Поскольку скрипт расположен на сервере для предоставления IP-адреса, как я могу получить его, если вы не подключены к Интернету, так как он не загрузится, поэтому я хотел бы, чтобы ip! = "" Работалчто я сделал не так?Спасибо

<script type="application/javascript">
    function getip(json)
    {
        ip=json.ip
        if(ip!="")
        {
            if(ip=="123.123.123.123")
            {
                alert("You are at home");
            }
            else
            {
                alert("you are not at home");
            }
        }
        else
        {
            alert("You are not connected to the internet");
        }
    }
</script>
<script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip">
</script>

Ответы [ 2 ]

1 голос
/ 23 октября 2010

Способ работы JSONP состоит в том, чтобы вызывать этот метод с ответом, ваш серверный ответ от http://jsonip.appspot.com/?callback=getip выглядит примерно так:

getip({ "ip": "123.123.123.123", "addres": "123.123.123.123" });

Но когда вы не подключены, этот скрипт включает только ошибки,и метод никогда не называется , вот в чем проблема.Ваша проверка if и весь метод getip() никогда не срабатывали.Вы можете сделать очень простой тайм-аут, например:

var timer = setTimeout(function() { 
  alert("You are not connected to the internet");
}, 10000); //10 seconds
function getip(json){
  clearTimeout(timer);
  if(json.ip == "123.123.123.123") {
    alert("You are at home");
  } else {
    alert("you are not at home");
  }
}
0 голосов
/ 23 октября 2010

Ваша проблема в том, что если JSONP не загружается, вся функция вообще не будет вызываться.

Теоретически, есть событие onerror для элемента <script>, которое вы можете использовать, но согласно этому вопросу оно не работает надежно в IE.

Однако этот вопрос показывает обходной путь, который также может работать для вас: встраивание скрипта, который устанавливает переменную, и проверка этой переменной впоследствии. Это будет вариант, если вы управляете удаленным приложением, которое вы вызываете.

Если это невозможно, я думаю, что единственное, что вы можете сделать, - это установить в функции обратного вызова флаг, подобный json_loaded = true;, и использовать setTimeout для проверки этого флага через несколько секунд. Если флаг не установлен, скрипт не загрузился, и вам нужно действовать соответственно.

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