.getJSON jQueryでエンコードを設定する方法
-
09-06-2019 - |
質問
私のWebアプリでは、jQueryを使用していくつかのフォームフィールドを送信します。 $.getJSON()
方法。エンコードにいくつか問題があります。私のアプリの文字セットは次のとおりです charset=ISO-8859-1
, 、しかし、これらのフィールドは次のように送信されると思います UTF-8
.
で使用されるエンコーディングを設定する方法 $.getJSON
電話?
解決
おそらく使用する必要があると思います $.ajax()
エンコーディングを変更したい場合は、を参照してください。 contentType
以下のパラメータ( success
そして error
コールバックはあなたが持っていることを前提としています <div id="success"></div>
そして <div id="error"></div>
HTML内):
$.ajax({
type: "POST",
url: "SomePage.aspx/GetSomeObjects",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{id: '" + someId + "'}",
success: function(json) {
$("#success").html("json.length=" + json.length);
itemAddCallback(json);
},
error: function (xhr, textStatus, errorThrown) {
$("#error").html(xhr.responseText);
}
});
実は、ちょうど 1 時間前にこれを行う必要があったのです。何という偶然でしょう。
他のヒント
使いたい場合は $.getJSON()
呼び出しの前に以下を追加できます。
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
代わりに必要な文字セットを使用できます utf-8
.
オプションについて説明します ここ.
contentType :
サーバーにデータを送信する場合はこれを使用します content-type
. 。デフォルトは application/x-www-form-urlencoded
, ほとんどの場合、これで問題ありません。
scriptCharset :
とのリクエストのみ jsonp
または script
dataType と GET タイプ。リクエストを強制的に特定の文字セットとして解釈させます。リモート コンテンツとローカル コンテンツの間の文字セットの違いの場合にのみ必要です。
どちらかまたは両方が必要になる場合があります...
Wireshark を使用して JSON 呼び出しを分析する必要があるため、JSON ページの形成に文字セットが含まれているかどうかを確認できます。次に例を示します。
- シンプルなページの場合 text / html
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 .Content -Type: t 0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html ..Cache- 0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 Control: no-cach
- ページが MIME「charset = ISO-8859-1」のカスタム JSON を含むタイプの場合
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .Cache-C ontrol: 0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e no-cache ..Conten 0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t-Type: text/htm 0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l; chars et=ISO-8 0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C onnectio
何故ですか?なぜなら、次のような目標を JSON のページに置くことはできないからです。
私の場合、製造元の Connect Me 9210 Digi を使用しています。
- 非標準の MIME を使用することを示すためにフラグを使用する必要がありました。p-> theCgiPtr-> = fDataType eRpDataTypeOther;
- 新しい MIME を変数に追加しました。strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html;文字セット = ISO-8859-1 ");
それは私にとってはうまくいきました JSON によって渡されたデータを UTF-8 に変換して、ページ上で変換をやり直す必要はありません...
使用 encodeURI()
クライアントJSで使用してください URLDecoder.decode()
サーバーではJava側が動作します。
例:
JavaScript:
$.getJSON( url, { "user": encodeURI(JSON.stringify(user)) }, onSuccess );
ジャワ:
java.net.URLDecoder.decode(params.user, "UTF-8");
この関数を使用して utf-8 文字を回復します
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
例:
var new_Str=decode_utf8(str);