というわけで、添削おじさん登場。
[を] 笑い顔顔文字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);
としておいたほうがよほどのことが無い限り、キャッシュが効かないので素敵かと思います。