【问题标题】:javascript IP address question, what if fail to load/no internet connectivityjavascript IP地址问题,如果加载失败/没有互联网连接怎么办
【发布时间】:2010-10-23 12:58:44
【问题描述】:

如果我在家,我有一些代码;它会在弹出窗口中显示,如果您在家。如果您不在家,它将显示一个弹出窗口,说您不在家。由于脚本位于服务器上以提供 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>

【问题讨论】:

  • 如果 JSONP 加载失败,你的整个函数都不会被调用,对吗?

标签: javascript json


【解决方案1】:

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");
  }
}

【讨论】:

    【解决方案2】:

    您的问题是,如果 JSONP 加载失败,则根本不会调用整个函数。

    理论上,您可以使用&lt;script&gt; 元素的onerror 事件,但根据this question,它在IE 中无法可靠运行。

    但是,该问题也显示了一种可能对您有用的解决方法:嵌入设置变量的脚本,然后检查该变量。如果您控制正在调用的远程应用程序,那将是一个选项。

    如果这不可能,我认为你唯一能做的就是让回调函数设置一个像json_loaded = true; 这样的标志,并在几秒钟后使用setTimeout 来检查该标志。如果未设置标志,则脚本无法加载,您需要采取相应措施。

    【讨论】:

    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 2017-08-21
    • 2010-12-16
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多