2009-12-04 32 views
2

我正在开发一个通过ajax从互联网获取数据的小部件,如果小部件无法连接到服务器,我想提供一条错误消息。我正在做jquery的ajax对象的请求,它提供了一个错误的回调函数,但它不会在没有互联网连接时调用,只有在请求被创建但由于其他原因失败时才会被调用。javascript/dashcode:检查互联网连接

现在我该如何检查电脑是否连接到互联网?

+0

我有一个非常愚蠢的问题,但你正在使用Dashcode的本地副本jQuery?不是Google CDN之一?我只是试图自己然后实现“嗯”... –

+0

我有压缩版本的jquery 1.3.2包括在项目中。 html脚本标签引用了本地文件。我也可以告诉jQuery可以离线工作,因为我使用了一个访客帐户在离线时进行屏幕截图,并看到了小动画的工作,我之前写过 –

+0

好吧,我想我已经开始工作了。试试看,让我知道。 –

回答

3

UPDATE:由于您正在创建仪表板小部件,因此我运行了大量测试。

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

事情我没有做这项工作:

  1. 的Widget如果你不使用Dashcode,请检查文档的适当的plist Dashcode中我点击“允许网络访问”(属性设置为关闭此上)
  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 
     } 
    } 
} 

/结束更新

我编辑我的回答your original question既然你问它在评论中回答了这个。评论后,我看到你发布了这个问题。

总而言之,将timeout参数添加到$.ajax呼叫中,并将其设置为较低的值(如5000毫秒)。你的错误函数将在请求超时后被调用。

+0

我不是那么说吗?大声笑;) –

+0

@blesh,我的观点是他应该继续讨论他原来的问题。他发布了这个问题作为对我在那里的回答的评论,在我可以回复评论之前,他提出了一个新问题。我只是重复我在这里发布之前发布的内容。但你的回答很好:) –

+0

为了公平对待OP,我在他发表评论17分钟后更新了我的回答。如果他和我一样,他的工作速度越快越好。 –

1

一个想法...

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

作为一个侧面说明...

这很难说,如果一台计算机是在互联网上,因为对于大多数计算机,互联网开始在交换机路由器>> >> >>调制解调器路由器>>等......“破碎”的地方通常是几跳,而且知道你是否在线的唯一方法就是“尝试”。

3

在你的错误函数中,第二个参数是状态,检查是否==“超时”,如果是这样,你无法到达webservice(或任何你连接到的),无论是否你有互联网接入与否,我假设这就是你关心的。

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

参见超时和错误here的章节。

+0

我甚至尝试将超时设置为1,错误功能仍然不会被调用。有没有超时的常见问题? –

+0

不是我所知道的。 :\ hmmmm –

2

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

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

-Connor

3

只有一行

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