1

Struts 2 アプリケーションで、見出しにカスタム エラーのメッセージを送信しています。struts.xml ファイルに次のようなグローバルな結果を追加することでそれを行いました。

<global-results>
    <result name="badDataError" type="httpheader">
       <param name="status">500</param>
       <param name="headers.errorMessage">${exception.message}</param>
    </result>
</global-results>

<global-exception-mappings>
    <exception-mapping result="badDataError" exception="mypackage.BadDataException" />
</global-exception-mappings>

だから、次のような例外をスローすると

throw new BadDataException("my error message");

そのメッセージはファイルのヘッダーに含まれているため、json でエラーとして読み取ることができます。

$.ajax(
    { 
        url: ...,
        type: "POST",
        data: ...,
        success: function(data, textStatus) {
            alert("save works");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            var errorMessage = XMLHttpRequest.getResponseHeader('errorMessage'); 
            var message = "There has been an error";
            if (errorMessage != null){
                message = message + ':<br/>'+errorMessage;
            }
            alert(message);
        },
        dataType: "json"
    }
);    

これは機能しますが、特殊文字 (例: á é ñ ...) を含むメッセージを送信するたびに、アラートにも、console.log() を使用して変数を表示しても正しく表示されません。 javascript で正しいエンコーディングを使用していないかのように、正しく表示されます。

私はajax呼び出しで設定しようとしました

contenType: 'application/x-www-form-urlencoded; charset=UTF-8'
or
contenType: 'application/x-www-form-urlencoded; charset=ISO-8859-1'

しかし、何の成功もありません。

エラー メッセージとヘッダーに使用されているエンコーディングを確認し、別のエンコーディングを選択するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

非ASCIIテキストのヘッダーフィールドエンコーディングは、ここで定義されています:http ://www.ietf.org/rfc/rfc2047.txt

読むのはそれほど難しいことではありません、そこにあなたの答えが見つかります。エンコードされたヘッダーフィールドの例は次のとおりです。

 =?iso-8859-1?q?this=20is=20some=20text?=
于 2012-10-31T19:33:03.407 に答える