2013-11-21 75 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