2009-12-04 33 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。請檢查其他舊版瀏覽器。