0

次のように、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値を取得します。

何か案が?

4

3 に答える 3

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> 
于 2013-01-22T10:13:20.563 に答える
2

コードスニペットを少し誤解しました。Scott Hanselmanの記事で、彼はHTMLドキュメントのにカスタムmeta要素を追加しています。headjQueryセレクター$("meta[name='accept-language']")はそのメタ要素を見つけるだけなので、その値を取得できます。

返されたページのリクエストでクライアントから送信された値を直接確認する方法はありません。DOMによって公開される情報ではありません。最も近いのはですがnavigator.language、これはブラウザで設定されている言語であり、ヘッダーとは異なります。

これが、この情報を公開するためにカスタムmetaタグが追加された理由です。

于 2013-01-22T10:15:11.890 に答える
0

あなたはjavascriptで行うことができます。

  1. Acceptヘッダーは、クライアント側で変更できます。サーバー側のチェックも行います。(ただし、言語ヘッダーについてのみ懸念します)

//navigator.userLanguage for ie

//navigator.language for other

var language = window.navigator.userLanguage || window.navigator.language;
alert(language);
于 2013-01-22T10:08:53.277 に答える