我正在開發一個通過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可以離線工作,因爲我使用了一個訪客帳戶在離線時進行屏幕截圖,並看到了小動畫的工作,我之前寫過 –
好吧,我想我已經開始工作了。試試看,讓我知道。 –