当我使用 Appcache Manifest 请求外部资源时,为啥 jQuery 会抛出错误?
Posted
技术标签:
【中文标题】当我使用 Appcache Manifest 请求外部资源时,为啥 jQuery 会抛出错误?【英文标题】:Why does jQuery throw an error when I request external resources using an Appcache Manifest?当我使用 Appcache Manifest 请求外部资源时,为什么 jQuery 会抛出错误? 【发布时间】:2013-08-12 22:14:53 【问题描述】:我有一个使用 .appcache 清单的应用程序。一切正常,资源被缓存:
CACHE MANIFEST
CACHE:
css/images/ajax-loader.gif
[...]
NETWORK:
http://docs.google.com/*
SETTINGS:
prefer-online
现在,当我像这样从 http://docs.google.com 请求 CSV 资源时:
$.get(url, function (data)
// do something with the data
).fail(function ()
alert("There was an error in loading current data from the server.");
);
即使我真的在线(在 Chrome 和 FF 上),请求也会失败。在我使用 Appcache 之前一切正常。
在拥有 Appcache 清单时请求外部资源的正确方法是什么?
【问题讨论】:
我得出的结论是,它实际上可能与跨域资源共享有关,因为我不控制谷歌文档(它可能以前有效,因为相关文件仍在我的浏览器缓存)。 Chrome 显示“已取消”状态代码,但是,在 FF 中,我的方法效果很好。这是为什么呢? 查看此 JQuery.ajax() 文档中的“缓存”部分:api.jquery.com/jQuery.ajax。如果你使用它而不是 'get()' 和 'cache: false' 会发生什么? @Holf 感谢您的建议,显然真正的问题出在其他地方,请参阅下面的答案(花了我几个小时)。还是谢谢! 【参考方案1】:我刚刚开始使用 tabletop。没有更多的 CORS 问题.. 暂时。
【讨论】:
【参考方案2】:正如我在评论中提到的,问题不仅在于 jQuery,还在于 CORS。 Google Docs 不支持它(“发布到网络”意味着下载,而不是从不同的 URL 请求资源,即来源。显然 Google 不想添加 Header set Access-Control-Allow-Origin "*"
。
所以我所做的是遵循这个有用的指南:https://webapps.stackexchange.com/questions/11864/how-can-i-retrieve-records-from-a-google-spreadsheet-in-json-format 和 https://developers.google.com/gdata/samples/spreadsheet_sample(URL 现在不是 CSV 而是 JSONP,它也更改为 //spreadsheets.google.com/feeds/list/[...]/[...]/public/values?alt=json-in-script
并且 jQuery 会在调用时自动添加 callback=xxx
:
$.ajax(
url : url,
type : 'GET',
dataType : 'jsonp',
success : function (data)
for(var i in data.feed.entry)
console.log(entry['gsx$' + 'actualColumnHeader'].$t);
,
error : function ()
alert('Failed');
);
这无论如何都不好或不干净(Atom Feed 而不是 CSV 或 JSON,只是为了解析它?真的吗?),但它对我有用。
【讨论】:
以上是关于当我使用 Appcache Manifest 请求外部资源时,为啥 jQuery 会抛出错误?的主要内容,如果未能解决你的问题,请参考以下文章