我正在开发一个通过ajax从互联网获取数据的小部件,如果小部件无法连接到服务器,我想提供一条错误消息。我正在做jquery的ajax对象的请求,它提供了一个错误的回调函数,但它不会在没有互联网连接时调用,只有在请求被创建但由于其他原因失败时才会被调用。javascript/dashcode:检查互联网连接
现在我该如何检查电脑是否连接到互联网?
我正在开发一个通过ajax从互联网获取数据的小部件,如果小部件无法连接到服务器,我想提供一条错误消息。我正在做jquery的ajax对象的请求,它提供了一个错误的回调函数,但它不会在没有互联网连接时调用,只有在请求被创建但由于其他原因失败时才会被调用。javascript/dashcode:检查互联网连接
现在我该如何检查电脑是否连接到互联网?
UPDATE:由于您正在创建仪表板小部件,因此我运行了大量测试。
我发现$.ajax
调用实际上在没有互联网连接时触发错误。所以我开始着手创建一个XMLHTTPRequest对象,并取得了巨大的成功。如果你需要JSON解析,我建议还包括json2.js解析器。
事情我没有做这项工作:
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毫秒)。你的错误函数将在请求超时后被调用。
我不是那么说吗?大声笑;) –
@blesh,我的观点是他应该继续讨论他原来的问题。他发布了这个问题作为对我在那里的回答的评论,在我可以回复评论之前,他提出了一个新问题。我只是重复我在这里发布之前发布的内容。但你的回答很好:) –
为了公平对待OP,我在他发表评论17分钟后更新了我的回答。如果他和我一样,他的工作速度越快越好。 –
一个想法...
设置一个JavaScript计时器。如果ajax调用成功,请清除计时器。如果定时器触发,那就表示请求失败。
作为一个侧面说明...
这很难说,如果一台计算机是在互联网上,因为对于大多数计算机,互联网开始在交换机路由器>> >> >>调制解调器路由器>>等......“破碎”的地方通常是几跳,而且知道你是否在线的唯一方法就是“尝试”。
在你的错误函数中,第二个参数是状态,检查是否==“超时”,如果是这样,你无法到达webservice(或任何你连接到的),无论是否你有互联网接入与否,我假设这就是你关心的。
$.ajax({
/* your other params here*/
error: function (req, status, error) {
if(status == "timeout") alert("fail!");
},
timeout: 2000 //2 seconds
});
参见超时和错误here的章节。
我甚至尝试将超时设置为1,错误功能仍然不会被调用。有没有超时的常见问题? –
不是我所知道的。 :\ hmmmm –
你可以用标准的,易于理解的JavaScript代码来编写它。我还没有开发任何'小部件',只是互联网iPhone应用程序,但它应该仍然有效。在这里你去:
var online = window.navigator.onLine;
if (!online){
alert('You are not currently connected to the internet. Please try again later.');
}
-Connor
只有一行
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。请检查其他旧版浏览器。
我有一个非常愚蠢的问题,但你正在使用Dashcode的本地副本jQuery?不是Google CDN之一?我只是试图自己然后实现“嗯”... –
我有压缩版本的jquery 1.3.2包括在项目中。 html脚本标签引用了本地文件。我也可以告诉jQuery可以离线工作,因为我使用了一个访客帐户在离线时进行屏幕截图,并看到了小动画的工作,我之前写过 –
好吧,我想我已经开始工作了。试试看,让我知道。 –