人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

jQuery.ajax()で日本語が文字化けします。
以下のようなコードでajax通信を行うと、title, articleに日本語がセットされた際文字化けします。送信元のhtmlがShift_JISで書かれているので、beforeSendで明記すれば解決するかと思いましたが直りません。どうすれば解決できるでしょうか?

$.ajax({
beforeSend: function(xhr){
xhr.overrideMimeType("text/html;charset=Shift_JIS");
},
type: "POST",
url: "message_send.html",
data:{
"title": title,
"article": article
},
success:function(){
alert("success");
},
failure:function(){
alert("failure");
},
});

●質問者: はっしー
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Lhankor_Mhy
ベストアンサー

確認していただきたいのですが、そのリクエスト先でShift-JISのURLデコードをしているのではありませんか?
もしそうであれば、jQueryのデフォルトエンコードを無効にして、自分でShift-JISでのURLエンコードを実装するしかないと思います。

ググったところこのようなライブラリがあるようです。
http://www.junoe.jp/downloads/itoh/enc_js.shtml


はっしーさんのコメント
ありがとうございます。 教えていただいたライブラリを使って次のように書き換えてやってみましたが、 %を含むSJISエスケープ文字列そのもので保存されてしまいました。 beforeSendを外した状態でもやってみましたがうまくいきません。 リクエスト先のhtmlは外部サービスのものなので、内部の確認は困難です。。 $.ajax({ beforeSend: function(xhr){ xhr.overrideMimeType("text/html;charset=Shift_JIS"); }, type: "POST", url: "message_send.html", data:{ "title": EncodeSJIS(title), "article": EncodeSJIS(article) }, success:function(){ alert("success"); }, failure:function(){ alert("failure"); }, });

Lhankor_Mhyさんのコメント
>> jQueryのデフォルトエンコードを無効にして << と書きました通りです。 >http://api.jquery.com/jQuery.ajax/:title> processData (default: true) Type: Boolean By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false. <<

Lhankor_Mhyさんのコメント
失礼しました。processDataを指定しなくても、dataにstringを渡せばいいようです。

はっしーさんのコメント
dataにstringを渡すようにかえたところ、うまくいきました! ご教授いただきありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ