我尝试用jQuery以这种方式检索"accept-language" HTTP头值:
$(document).ready(function () {
//Ask ASP.NET what culture we prefer, because we stuck it in a meta tag
var data = $("meta[name='accept-language']").attr("content")
});
从这里提取。
HTTP头是存在的,因为我可以看到它与Chrome网络控制台选项卡"Accept-Language:en-US,en;q=0.8,de;q=0.6,es;q=0.4"
,但我总是得到undefined
值。
任何想法?
你需要注意,这段代码不是检索实际的标头,而是已经放入META
标签的值(JavaScript不能访问原始请求的标头)。在您所链接的文章中,您有这个帮助器:
namespace System.Web.Mvc
{
public static class LocalizationHelpers
{
public static IHtmlString MetaAcceptLanguage<T>(this HtmlHelper<T> html)
{
var acceptLanguage = HttpUtility.HtmlAttributeEncode(Threading.Thread.CurrentThread.CurrentUICulture.ToString());
return new HtmlString(String.Format("<META name= content= {0}?? accept-language??>",acceptLanguage));
}
}
}
需要添加到项目中,然后在视图中使用,如下所示:
<HTML>
<HEAD>
...
@Html.MetaAcceptLanguage()
</HEAD>
...
</HTML>
您对代码片段有一点误解。在Scott Hanselman的文章中,他向HTML文档的head
添加了一个定制的meta
元素。jQuery选择器$("meta[name='accept-language']")
只是查找元元素,这样您就可以获得它的值。
在返回页面的请求中没有直接的方法来查看从客户端发送的值。它不是DOM公开的信息。您可以得到的最接近的是navigator.language
,但这只是浏览器中设置的语言,与标题不同。
这就是添加自定义meta
标记来公开此信息的原因。
你可以用javascript做。
- Accept报头可以在客户端更改。服务器端检查也是如此。(虽然你只关心语言头)
//导航。userLanguage for ie
//导航。其他
语言var language = window.navigator.userLanguage || window.navigator.language;
alert(language);