javascript / dashcode:检查互联网连接

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

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

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

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

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

  1. 在Dashcode的Widget属性中,我单击了“允许网络访问”(如果您没有使用Dashcode,请检查文档以获取正确的plist设置以启用此function)
  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( '工作');  //仅在Dashcode中运行时才有效
           //使用xhr.responseText或JSON.parse(xhr.responseText)
         } else if(xhr.status == 0){
           console.log('没有互联网');  //仅在Dashcode中运行时才有效
         } else {
           //其他一些错误
         } 
    }
 }

/结束更新

自从您在评论中提出问题后,我通过编辑原始问题的答案来回答这个问题 。 评论后,我看到你发布了这个问题。

总而言之,将timeout参数添加到$.ajax调用并将其设置$.ajax数字(如5000毫秒)。 请求超时后,将调用您的错误函数。

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

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

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

只需一行

 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调用成功,请清除计时器。 如果计时器触发,则表明请求失败。

作为旁注……

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