【发布时间】:2012-07-31 16:00:45
【问题描述】:
我正在使用 varnish+esi 从 RESTFul API 返回外部 json 内容。 这种技术允许我管理请求和刷新数据,而无需为每个请求使用网络服务器资源。
例如:
<head>
....
<script>
var data = <esi:include src='apiurl/data'>;
</script>
...
包含 esi varnish 后将返回:
var data = {attr:1, attr2:'martin'};
这工作正常,但如果 API 返回错误,此技术将生成解析错误。
var data = <html><head><script>...api js here...</script></head><body><h1 ... api html ....
我使用隐藏的 div 解析并捕获错误解决了这个问题:
...
<b id=esi-data style=display:none;><esi:include src='apiurl/data'></b>
<script>
try{
var data = $.parseJSON($('#esi-data').html());
}catch{ alert('manage the error here');}
....
我也尝试过使用脚本类型 text/esi,但浏览器会在脚本标签 (wtf) 中呈现 html,例如:
<script id=esi-data type='text/esi'><esi:include src='apiurl/data'></script>
问题:
有什么理由要包装标签并避免浏览器解析它吗?
【问题讨论】:
-
Martin — 您能否包含一个由 API 因错误返回的 HTML 示例?
-
我真的不知道,但是是这样的:
-
您的文档是 HTML 还是 XHTML ?
-
@sitifensys: 它是html5 ,另外我正在使用modernizr
-
天哪。这是一个非常丑陋的情况。一般来说,我会说正确的方法是调用 Ajax,但您似乎不想这样做。如果您非常讨厌标准,我想您可以将内容嵌入
iframe并使用innerHTML访问它。
标签: javascript json parsing varnish esi