javascript / dashcode:检查互联网连接
我正在开发一个小部件,通过ajax从互联网上获取数据,如果小部件无法连接到服务器,我想提供错误消息。 我正在使用jquery的ajax对象执行请求,该对象提供错误回调函数,但是在没有Internet连接时不会调用它,只有在请求发出但由于其他原因而失败时。
现在我如何检查计算机是否已连接到互联网?
更新 :由于您正在创建仪表板小部件,因此我运行了许多测试。
我发现$.ajax
调用实际上在没有互联网连接时触发了错误。 所以我开始手动创建XMLHTTPRequest对象并取得了巨大的成功。 如果你需要JSON解析,我建议也包括json2.js解析器。
我为完成这项工作所做的事情:
- 在Dashcode的Widget属性中,我单击了“允许网络访问”(如果您没有使用Dashcode,请检查文档以获取正确的plist设置以启用此function)
- 我使用了以下代码:
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调用成功,请清除计时器。 如果计时器触发,则表明请求失败。
作为旁注……
很难判断一台计算机是否在互联网上,因为对于大多数计算机来说,互联网都是从交换机>>路由器>>调制解调器>>路由器>>等开始的…它在哪里被“打破”通常会有几个跳,并且知道你是否在线的唯一方法(我知道)是“尝试”。