« バンドル切り替えのショートカットを独自に設定する(TextMaterへの道#1) | メイン | 特定条件にマッチするプロセスをまとめてにKILLする方法 »

jQueryの $.getJSON 等を使った Ajax でIEが動作しない件

javascript のライブラリとして最近 jQuery を使ってます。

;jQuery:

選んだ理由は

  • 複数ブラウザに対応(当然)
  • 軽量である
  • 最近のversion upで相当速度向上したらしい
  • DOM指定にXpathやCSS表記が使える事(個人的な好み)

です。XPathという珍しいモノ(?)に触れるのもXMLの勉強になって良いです。(ちょっとチガウ)

さて、jQueryにもAjaxを非常に簡単に実装できる便利関数が幾つか用意されているんですが、リクエスト先からJSONオブジェクトが返ってくるようなケース(ほとんどがそうだと思いますが...)では $.getJSON を使うのが便利。


$.getJSON('script.php', {param1:value1, param2:value2}, function(json){
alert(json.value);
})

ってな感じに、eval する事無くいきなりJSONオブジェクトとして扱えるモノを引数として貰えるからです。1行でもjavasriptのコードを少なくしようという jQuery のコンセプトがこんな所にも表れているような気がします。

...が、FirefoxやSafariで実験している時は良いのですが、deployしてIEで確認してみると動かない...というか callback が呼ばれないという事態に陥る事があります。そんな時はリクエストを投げる先である script.php で明示的にConent-typeのレスポンスヘッダを指定してやると巧くいきます。

header('Content-type: application/json; charset=UTF-8');

jQueryを使ってAjaxを実装するとIEでのみエラーが起きたというページを参考にさせて貰ったのですが(筆者の方に感謝デス!)、これが分かるまで数時間をロスってしまいました。



あ。JSONのMimeTypeについて補足です。

少し気になって調べてみた所、JSONを返す時のMimeType指定は、安易に text/html とかにしちゃうと何かと問題が発生するそうなので、application/json にした方が良い模様。

またRFC4229によるとtext/javascript は obsolete だそうで、RFC4627にはちゃんと application/json と規定されてようです。ここは従っておいた方がよさげですね。

以上、 jQuery , Ajax, IE の組み合わせでハマりましたというメモと JSON の MimeType についてでした。

トラックバック

このエントリーのトラックバックURL:
http://feedtailor.jp/cgi-bin/mt/mt-tb.cgi/180

コメント (2)

はじめまして。

記事がお役たったようで幸いです。
私がハマったときにも、「同じような事でハマる人がいるかもなあ」と思って書いた記事ですので、役に立ってよかったです。

MimeTypeの件は確かにそうですね。
あまり考えていませんでした。私の記事も近いうちに直します。

>civic siteさん
コメント有り難うございます!!いぁいぁホントに助けられました。最近は何かでハマったとしても今回の例のようにどなたかが同じ経験をブログに書いて下さってる事が多いので助かります。便利な世の中になりましたよね^^ 今後とも宜しくお願い致します。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年07月29日 17:29に投稿されたエントリーのページです。

ひとつ前の投稿は「バンドル切り替えのショートカットを独自に設定する(TextMaterへの道#1)」です。

次の投稿は「特定条件にマッチするプロセスをまとめてにKILLする方法」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type