2013-11-21 118 views
4

我正在開發一個HTML5應用程序。我利用.manifest解決方案緩存所有文件,因此當您無法訪問Internet時可以使用該應用程序。Ajax請求和離線緩存

我想同步一些數據到服務器,只要有可能。由於變量navigator.online似乎不夠可靠,我做了一個AJAX請求(使用jQuery.get())來檢測我是否得到了某些迴應,這意味着用戶在線。

問題是,只要整個應用程序被緩存,每個向Internet上的文件發出的AJAX請求都會無故失敗。我嘗試了Chrome,Firefox和Safari(在iPad上),結果相同。

我使用jQuery.get()來獲取作爲應用程序一部分(並同時緩存)的一些文件的內容,這些請求完美地工作。

我第一次遇到同源問題。所以我試圖去https://graph.facebook.com做一個請求,只是爲了看看我能得到什麼回報。在Chrome控制檯中,請求狀態爲「待處理」,並收到0字節。

當我停用清單並清空緩存時,根本沒有問題。

你有什麼想法或暗示,爲什麼這是發生?

謝謝:)

PS:英語不是我的母語,所以請原諒(並隨時糾正)我可能犯任何錯誤。 :)

+0

'.get()'是一個舒適的速記。但爲了更好地控制請求,請嘗試['.ajax()'](http://api.jquery.com/jQuery.ajax/),或者使用'.get()'與['.ajaxSetup()'] (http://api.jquery.com/jQuery.ajaxSetup/) – Boaz

回答

2

檢查您是否有網絡部分。緩存清單文件的網絡部分指定了Web應用程序需要聯機訪問的資源。 *是與所有匹配的通配符。

CACHE MANIFEST 
# 2013-11-21:v1 

CACHE: 
/Content/Site.css 
/Scripts/jquery-1.8.2.js 

NETWORK: 
* 

FALLBACK: 
//Home/Offline 
+0

注意:更新清單後,如果代碼不調用swapCache(),則必須刷新瀏覽器兩次() – LostInComputer

+0

ajax如何調用其他域? (或者由Access-Control-Allow-Origin頭部允許,或者通過jQuery的ajax jsonp類型)。我無法執行此請求,並且顯然將緩存清單的NETWORK部分中的跨源URL鏈接也不起作用,與將*或任何其他條目放入我自己的域中時相反。 – Ernesto