[英]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解析器。
我为完成这项工作所做的事情:
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.