使用jQuery读取“accept-language”HTTP标头值

时间:2013-01-22 10:03:35

标签: jquery asp.net-mvc localization http-headers

我尝试用这种方式用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")
});

Extracted from here.

存在HTTP标头,因为我可以通过Chrome网络控制台标签"Accept-Language:en-US,en;q=0.8,de;q=0.6,es;q=0.4"看到它,但我总是获得undefined值。

有什么想法吗?

3 个答案:

答案 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。

  1. 可以在客户端更改Accept标头。所以服务器端也检查。 (虽然你只关心语言标题)
  2. // navigator.userLanguage for ie

    // navigator.language for other

    var language = window.navigator.userLanguage || window.navigator.language;
    alert(language);