838532 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

カレンダー

日記/記事の投稿

カテゴリ

購入履歴

プロフィール

ヌメタロウ

ヌメタロウ

楽天カード

サイド自由欄

2007.02.12
XML
テーマ:私のPC生活(7419)
カテゴリ:rakuten api 関係
結局、クイックハックなどどこ吹く風、CGIで粗成形したのをjsで表示、(同期だけど)裏側でリクエストをやり取りする、それなんてAjaxな作りになってきてしまった。

それにしても、Ajaxでプログラム出来る人、とくにそれで飯を食ってる人はすごいな。
ホントもうイライラして死にそう。
CSSで、ブラウザ毎の見た目をそろえる仕事の方がまだ楽だ。


さて、ちょっとググテみればわかるのだけれども、javaScript で XMLHttpRequest を発行した後、結果を responseText で受け取ると、Safariだと文字化けしてしまう。
HTTPヘッダにもキャラセット入れるといいよ、と書いてあったけれども、どうもうまくいかない。

色々な解決策が提示されていたけれども、基本に戻って、URIエスケープでのりきる簡単な方法をメモ。
ただし、XMLHttpRequest を直にAPIに向かって投げているのではなく、間にPerlが入っているから出来る芸当だとも言える。


話は単純
1.XMLHttpRequest に向かってPerlから送られるデータを、エスケープする。
具体的には、
$outPutData =~ s/([^?w ])/'%'.unpack('H2', $1)/eg;
こんなかんじ。

2.受け取り側のjsで、decodeURIComponent()を使ってアンエスケープする。
var inputData = decodeURIComponent(reqestObj.responseText);
こんなかんじ。


あれ? と思った君はスルドイ。
XMLHttpRequest は application/x-www-form-urlencoded なんじゃないの?
$outPutData =~ s/([^?w ])/'%'.unpack('H2', $1)/eg;
$outPutData =~ tr/ /+/;
が正しい形なんじゃないの?

おいちゃんも実際の所はそうなんじゃないかと思うのだけれども、decodeURIComponent()は実際の所、+をスペースに置き換えてくれない。
だから、2行目はいらない。

いや、どう考えても application/x-www-form-urlencoded じゃないだろ、エスケープされないし。
という意見の人もいると思う。
ところが、safariだと、エスケープされてるような気がするんだよね…


という所が、これからの課題。
おんなじように送っても、IE7とsafariで挙動(送られているデータの状態)が違うというのが、また発狂しそう。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2007.02.12 21:57:29
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X