2013-04-04 155 views
2

我在服務器上動態創建包含已翻譯字符串的JavaScript文件。 當我看着Chrome檢查器時,這個文件永遠不會被緩存,(Scripts文件夾中的其他實際JS文件也會被緩存) * 爲什麼不是這樣? *Chrome中的JS文件永遠不會被緩存

<script src="somepath/Scripts/translate-nl-BE.js"></script> 
or 
<script src="somepath/Scripts/translate-en-GB.js"></script> 

這是映射到以下MVC行動:

[HttpGet]   
public ActionResult TranslateJS(string culturecode) { 
    ViewBag.JSCulture = culturecode; 
    Response.ContentType = "text/javascript"; 
    return PartialView("TranslateJS"); 
} 

這裏的觀點:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<% 
    string culturecode = ViewBag.JSCulture; 
%> 
var translations = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize((ViewBag.Translate as List<ERPManager.TranslationService.FlatTranslation>).Where(x=>x.CultureCode==culturecode).ToDictionary(t=>t.Key,f=>f.Value)) %>; 

這基本上只是序列化JSON數組(我知道這看起來比dirtyer只是返回一個jsonresult,但我不能ajax調用這個文件,它需要鏈接到腳本標記

這是我從服務器獲得響應:

Cache-Control:private 
Content-Length:10987 
Content-Type:text/javascript; charset=utf-8 
Date:Thu, 04 Apr 2013 10:15:11 GMT 
Server:Microsoft-IIS/7.5 
X-AspNet-Version:4.0.30319 
X-AspNetMvc-Version:3.0 
X-Powered-By:ASP.NET 

這裏所返回的獲取文件的預覽:它基本上只是翻譯的鍵值字典。

var translations = {"vertaald":"Vertaald","gerelateerd":"Gerelateerd","details":"Details"}; 
+1

你想讓它緩存多久?這種改變會經常發生嗎 – Liam 2013-04-04 10:36:30

+0

就瀏覽器而言,這個文件永遠不會改變,所以應該永遠緩存,但我可以解決每日/每週exipration – 2013-04-04 10:39:31

回答

2

這聽起來像你想要的是一個expiresHTTP header

你可以在你的MVC代碼中設置這樣的:

[HttpGet]   
public ActionResult TranslateJS(string culturecode) { 
    ViewBag.JSCulture = culturecode; 
    Response.ContentType = "text/javascript"; 
    Response.Expires = (60*24);//24 hours 
    return PartialView("TranslateJS"); 
} 

請記住,如果你設置一個Expires頭的瀏覽器將不會再請求文件,直到緩存內容有「已過期」。謹慎使用!

+0

這確實使它工作!謝謝! – 2013-04-04 11:08:09

相關問題