- 2008-02-19 (火)
- Javascript
2008/02/07にリリースされたばかりの jQuery v1.2.3 をさっそく試してみたところ、偶然不具合を発見。$.getJSON() メソッドを以下のように、第二引数の parameter hash に callback を指定して実行すると、コールバック関数が一切呼ばれません:
$.getJSON( 'http://.../api', { callback: '?' }, function (){} );
一方、第一引数のURL文字列に callback 指定をする方式だと今までどおり問題なく動作する模様:
$.getJSON( 'http://.../api?callback=?', function (){} );
引数の書式で動作が異なるのでトリッキーすね。僕の環境 Windows x Mozilla Firefox 2.0.0.12 にてバグ確認できています。検証用のデモページはこちら。
バグ解消版 jQuery 1.2.3 はこちら
リクルートWEBサービスなんてのを作って、JSONP利用を推進したい気満々な自分からしたら、このバグは痛いので慌てて jQuery コード読み漁ってなんとなく原因特定した次第。本家 jQuery な方々にはバグレポートを投げてみたので、そのうち解消される(といいな)はずですが、とりあえず今すぐ JSONP な v1.2.3 を使いたい方のために、僕の稚拙なコード修正を加えた解消版をここに晒しておきます。ご利用は自己責任で...
download jQuery 1.2.3 - with JSONP bug fix
ちなみに改修箇所はこれです(diff patch)。
オマエそれ既出だっつーの、なんて本家 Resig さん達に突っ込まれたらかっこ悪いなあ...
既出でした(照
2008/02/20 追記
やっぱり既出でした。
http://dev.jquery.com/ticket/2020
$.getJSON() 第二引数の param hash に文字列として '?' が混在した際に、jQuery が勝手に jsonp callback だと認識してしまって困る!という事象が過去にあって、件の param hash を使った jsonp 指定は depricate (機能削除) したそうです。
なるほどー!
developer メーリングリストに一声かけずに、いきなり trac ticket 登録しちゃって恥ずかしすぎ orz