【问题标题】:javascript/dashcode: check for internet connectionjavascript/dashcode:检查互联网连接
【发布时间】:2009-12-04 02:52:37
【问题描述】:

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

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

【问题讨论】:

  • 我有一个非常愚蠢的问题,但是您使用的是带有 Dashcode 的本地 jQuery 副本,对吗?不是谷歌 CDN 吗?我只是自己尝试了一下然后意识到“duh”......
  • 我在项目中包含了 jquery 1.3.2 的压缩版本。 html script 标签引用本地文件。我还可以看出 jquery 离线工作,因为我在离线时使用访客帐户进行屏幕截图并看到我之前写的小动画工作
  • 好的,我想我成功了。试试看,让我知道。

标签: javascript jquery ajax connection


【解决方案1】:

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

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

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

  1. 在 Dashcode 的 Widget Attributes 中,我点击了“允许网络访问”(如果您不使用 Dashcode,请查看文档以了解正确的 plist 设置以将其打开)
  2. 我使用了以下代码:
var xhr = new XMLHttpRequest(); xhr.addEventListener('readystatechange', state_change, true); xhr.open("GET", url, true); xhr.send(null); 函数状态变化(){ 如果(xhr.readyState == 4){ 如果(xhr.status == 200){ console.log('工作'); // 只有在 Dashcode 中运行时才有效 // 使用 xhr.responseText 或 JSON.parse(xhr.responseText) }否则如果(xhr.status == 0){ console.log('没有网络'); // 只有在 Dashcode 中运行时才有效 } 别的 { // 其他一些错误 } } }

/结束更新

我通过编辑我对your original question 的回答来回答这个问题,因为您在 cmets 中提出了这个问题。评论后我看到你发布了这个问题。

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

【讨论】:

  • @blesh,我的意思是他应该继续讨论他原来的问题。他发布了这个问题作为对我的回答的评论,在我发表评论之前,他提出了一个新问题。我只是在重复您在此处发布之前在此处发布的内容。但你的回答很好:)
  • 为了公平起见,我在他发表评论后 17 分钟更新了我的答案。如果他和我一样,他会尽可能快地工作。
  • 哈哈……一切都好。这里经常发生。我刚刚在另一个帖子中抱怨我“模仿他”,所以我想我会很有趣,并在这个帖子中说些什么,因为它在我的脑海中很新鲜。
  • 哈哈...这很有趣,尤其是当只有一种(非常好的)方法可以做某事时! @Patrick Oscity 不过是个直射手。他没有意识到这两个问题会如此紧密地联系在一起。
【解决方案2】:

在你的错误函数中,第二个参数是状态,检查是否==“超时”,如果是,你无法访问网络服务(或你正在连接的任何东西),无论你是否有没有互联网访问,我假设这就是你关心的。

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

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

【讨论】:

  • 我什至尝试将超时设置为 1,但仍然没有调用错误函数。超时有什么常见问题吗?
  • 我不知道。 :\嗯嗯
【解决方案3】:

只有一行

if(window.navigator.onLine)
{
// You are connected to internet
}
else
{
// You are not connected to internet
}

window.navigator.onLine 返回真或假。

在 IE 8 和 Mozilla Firefox 3.5.7 上测试。请检查其他旧版浏览器。

【讨论】:

    【解决方案4】:

    您可以使用标准的、易于理解的 javascript 代码编写它。我没有开发任何“小部件”,只是互联网 iphone 应用程序,但它应该仍然可以工作。给你:

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

    -康纳

    【讨论】:

      【解决方案5】:

      一个想法...

      设置一个javascript计时器。如果ajax调用成功,清空定时器。如果计时器触发,则表明请求失败。

      顺便说一句……

      很难判断一台计算机是否在互联网上,因为对于大多数计算机来说,互联网始于交换机 >> 路由器 >> 调制解调器 >> 路由器 >> 等......它“坏”的地方通常是几个跳出,知道你是否在线的唯一方法(我知道)是“尝试”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 2017-03-16
        • 2014-02-08
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多