我有一个在 Azure 上运行的网站。在那里,我正在使用 Knockout.JS 组件和自定义加载器。我使用了 KO 文档中的一个非常简单的示例:
(使用自定义代码加载外部文件的组件加载器) http://knockoutjs.com/documentation/component-loaders.html#custom-component-loader
// loader helper
var templateFromUrlLoader = {
loadTemplate: function(name, templateConfig, callback) {
if (templateConfig.url) {
var today = new Date();
var fullUrl = templateConfig.url + "?v=" + today.getTime();
$.get(fullUrl, function(markupString) {
ko.components.defaultLoader.loadTemplate(name, markupString, callback);
});
} else {
callback(null);
}
}
};
// component is registered
ko.components.register('postcode-lookup', {
viewModel: function() {
// component js
},
template: {
url: 'https://www.purplebricks.com/content/lib/component-postcode-lookup/dist/component/templates/postcode-lookup.html'
}
});
ko.components.loaders.unshift(templateFromUrlLoader);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
现在,在本地,一切都很完美,每次刷新页面时,都会获取组件模板:
响应预览如下:
将页面部署到临时/实时生产时会出现问题。每个人第一次都可以正常工作,但是一旦刷新页面,模板返回空白响应的概率就非常非常高 = 几乎 90%。显然是缓存了,响应代码变成304未修改,但是响应是空白的。我尝试添加一个查询字符串来添加时间戳 - 它几乎没有任何区别。现在我有一个 200 状态代码,但是请求的时间进入挂起状态并且似乎永远持续下去:
感觉 Azure 缓存的方式不正确,也许是 DNS 问题?
最佳答案
这似乎是由于 gzip header 设置不正确,请尝试将以下内容添加到路由配置中以防止 ASP.NET MVC 处理静态内容:
routes.IgnoreRoute("Content/{*pathInfo}");
关于javascript - 通过 $.get 加载外部文件通常不会返回响应,即使响应代码是 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36646831/