|
テーマ:私の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 api 関係] カテゴリの最新記事
|