asp.net mvc - 使用 jQuery 读取"接受语言"HTTP 标头值



我尝试用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做。

  1. Accept报头可以在客户端更改。服务器端检查也是如此。(虽然你只关心语言头)

//导航。userLanguage for ie

//导航。其他

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

相关内容

  • 没有找到相关文章

最新更新