繁体   English   中英

javascript / dashcode:检查互联网连接

[英]javascript/dashcode: check for internet connection

我正在开发一个小部件,它通过ajax从互联网上获取数据,如果小部件无法连接到服务器,我想提供错误消息。 我正在使用jquery的ajax对象来执行请求,该对象提供了错误回调函数,但是在没有Internet连接的情况下不会调用它,只有在请求发出但由于其他原因而失败时才会调用。

现在如何检查计算机是否已连接到互联网?

在你的错误函数中,第二个参数是status,检查是否==“timeout”,如果是,你无法访问webservice(或者你连接的任何东西),无论你是否有互联网访问权限或不,我假设你关心的是。

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

请参阅此处有关超时和错误的部分。

更新 :由于您正在创建仪表板小部件,因此我运行了许多测试。

我发现$.ajax调用实际上在没有互联网连接时触发了错误。 所以我开始手动创建XMLHTTPRequest对象并取得了巨大的成功。 如果你需要JSON解析,我建议也包括json2.js解析器。

我为完成这项工作所做的事情:

  1. 在Dashcode的Widget属性中,我单击了“允许网络访问”(如果您没有使用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调用并将其设置$.ajax数字(如5000毫秒)。 请求超时后将调用您的错误函数。

只需一行

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上测试过。 请检查其他旧版浏览器。

你可以用标准的,易于理解的javascript代码编写它。 我没有开发任何'小部件',只是互联网iPhone应用程序,但它应该仍然有效。 干得好:

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

-Connor

一个想法......

设置一个javascript计时器。 如果ajax调用成功,请清除计时器。 如果计时器触发,则表示请求失败。

作为旁注......

很难判断一台计算机是否在互联网上,因为对于大多数计算机来说,互联网都是从交换机>>路由器>>调制解调器>>路由器>>等开始的...它在哪里被“打破”通常会有几个跳,并且知道你是否在线的唯一方法(我知道)是“尝试”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM