JSONとContent-Type
サーバサイドからJSONを吐き出すときのContent-Typeなのですが、各ブラウザによって対応がちょっと違います。
下の表にまとめてみました。
×のところはeval中にエラーがでます。
Content-type | WinIE | Firefox | Safari | Opera(8.5) |
text/javascript | ○ | ○ | △ | × |
text/javascript; charset=utf-8 | ○ | ○ | ○ | × |
text/javascript; charset=utf8(utf-8の間違い) | × | ○ | ○ | × |
text/javascript+json | ○ | ○ | △ | × |
text/javascript+json; charset=utf-8 | ○ | ○ | ○ | × |
text/html; charset=utf-8 | ○ |
Safariでマルチバイトな文字を含む場合は、「charset=utf-8」があったほうがいいです。
Opera(8.5)はtext/javascriptだと根本的にだめみたいです。
Catalyst::View::JSONは「text/javascript+json」とかなっているんだけどどうするのが良いのでしょう。
さっきまで、間違えて「utf8」って書いてしまっていたんだけど、IE以外はうまく認識してくれますね。
確認は下のようなコードで行いました。prototype.jsのAjax.Requestをつかってます。
new Ajax.Request( "/foo",{ method: "get", parameters: params, onComplete: function(originalRequest){ try{ eval("var ret="+originalRequest.responseText); }catch(e){alert(e);} } });
コメント
これってDOMを操作して script ノードを追加する場合の話でしょうか? XMLHttpRequest で responseText を eval する場合は Content-Type はなんであっても大丈夫な気がしているのですがどうなんでしょう?
投稿者: https://blog.nomadscafe.jp/ miyagawa | 2006年01月10日 16:48
あぁutf-8とかでマルチバイトが入っているとevalしてもうまく認識してくれないってわけですかね。
投稿者: https://blog.nomadscafe.jp/ miyagawa | 2006年01月10日 16:56
>utf-8とかでマルチバイト〜
と、Operaですね。
Opera 9は分からないですけど、Content-Typeを選ぶみたいです。
投稿者: https://blog.nomadscafe.jp/ かぜぶろ | 2006年01月10日 19:05
Safari 向けに charset=utf-8 を入れるようにした 0.06 をリリースしました。Opera 向けの正規表現をもらえれば Opera のときだけ text/html にするパッチをいれるのは問題ないです。
投稿者: https://blog.nomadscafe.jp/ miyagawa | 2006年01月10日 19:43
Operaの判別は
$c->res->content_type("text/html; charset=$encoding") if $c->req->user_agent =~ /Opera/;
でいけると思います。
投稿者: https://blog.nomadscafe.jp/ かぜぶろ | 2006年01月10日 20:16
del.icio.usのJSON Feedは
Content-Type: application/x-javascript; charset=utf-8
だな。これだとOperaでも動くみたいだ。
投稿者: https://blog.nomadscafe.jp/ かぜぶろ | 2006年01月10日 21:59
0.08 で application/x-javascript に対応しました。
投稿者: https://blog.nomadscafe.jp/ miyagawa | 2006年01月10日 22:42
> 0.08
確認しました。すべてMacですが、Safari Firefox Operaで正しく動作しました。
何度かリリースし直していただいてすみません。
text/*だとブラウザが何かしら行おうとするのでしょうか。
投稿者: https://blog.nomadscafe.jp/ かぜぶろ | 2006年01月11日 01:07
いえいえ、いまHackathon中なのでなんでも書くものがあれば歓迎です :)
投稿者: https://blog.nomadscafe.jp/ miyagawa | 2006年01月11日 01:59