通过$ .get加载外部文件通常不返回响应,即使响应代码为200

时间:2016-04-15 12:12:42

标签: javascript jquery azure caching knockout.js

我在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>

现在,在本地,一切都运行良好,每次刷新页面时,都会获取组件模板:

XHR status

并且响应的预览在这里:

XHR preview

将页面部署到暂存/现场制作时会出现问题。它会在第一次对每个人都很好,但是一旦你刷新页面,模板返回空白响应的概率非常高=几乎90%。它显然是缓存的,响应代码变为304未修改,但响应为空。我已经尝试添加一个查询字符串,为它添加一个时间戳 - 它几乎与0差异。现在我有一个200状态代码,但是请求的时间进入待定状态并且似乎永远持续下去:

enter image description here

enter image description here

几乎感觉Azure正在缓存这个错误,也许是DNS问题?

1 个答案:

答案 0 :(得分:1)

这似乎是由于gzip标头设置不正确,请尝试将以下内容添加到路由配置中,以防止ASP.NET MVC处理静态内容:

routes.IgnoreRoute("Content/{*pathInfo}");