というわけで、添削おじさん登場。
[を] 笑い顔顔文字APIを作りました(なお、なぜか IE と Safari だと一回しか動きません。添削希望!)
理由は単純で、IEとSafariはJSONPをキャッシュしてしまうのです。
理由がわかれば、解決法も簡単です。たとえば以下のようにしてURIをUniqueにしちゃえばOK.
function WarosuJSON(cb){ this.proxy = 'http://mimitako.net/api/warosuapi.cgi'; this.cb = cb; this.count = 0; this.parse = function(cb){ var script = document.createElement('script'); script.id = this.proxy + '?format=json' + '&callback=' + this.cb + '&count=' + this.count++; script.charset = 'UTF-8'; script.src = script.id; document.lastChild.appendChild(script); // document.removeChild(script); // SafariがDOM Exceptionになるので削除 }; return this; }
あと、サーバー側ですが、__DATA__
の利用は避ける癖をつけた方がよいでしょう。mod_perlで動かないので(これ、個人的にはmod_perlで一番悲しいことだったりする)。
Dan the Ajax Monger
1番目のページでリクエスト(http://hogehoge/?count=0)して、次のページでリクエスト(http://hogehoge/?count=0 ページ移動で、this.count=0に初期化)される場合、ブラウザの戻るをすると、同じリクエストになって、キャッシュが使われてしまいます。
+ '&count=' + this.count++;
ではなく
+ '&rflg=' + parseInt(Math.random()*1000, 10);
としておいたほうがよほどのことが無い限り、キャッシュが効かないので素敵かと思います。