我尝试用这种方式用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
值。
有什么想法吗?
答案 0 :(得分:2)
您需要注意,此代码未检索实际标头,而是已放入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>
答案 1 :(得分:2)
您稍微误解了代码段。在Scott Hanselman的文章中,他向HTML文档的meta
添加了自定义head
元素。 jQuery选择器$("meta[name='accept-language']")
只是找到元元素,这样你就可以获得它的值。
没有直接的方法可以在返回页面的请求中查看客户端发送的值。这不是DOM暴露的信息。您最接近的是navigator.language
,但这只是浏览器中设置的语言,与标题不同。
这就是添加自定义meta
标记以显示此信息的原因。
答案 2 :(得分:0)
你可以使用javascript。
// navigator.userLanguage for ie
// navigator.language for other
var language = window.navigator.userLanguage || window.navigator.language;
alert(language);