jQueryを使った同じドメイン内のJSONPへのアクセスがIEで失敗する問題

JavaScriptがサーバにアクセスしてデータを取得する手段としてXMLHttpRequestがあるわけだけど、same domain policy すなわちセキュリティー的な観点から同一ドメイン内での通信に制限するポリシーによって、異なるドメインからデータを取ってくることはできない。ことになっている。
それを裏技的に回避する手段がJSONPであって、htmlのscriptタグを使えば別ドメインのデータも引っ張って来れるじゃんという代物。JSONPはDOM要素を動的にいじりながらやるわけで、XMLHttpRequestを使って正攻法でデータを取ってくるのとは随分とおもむきが違う。
とはいえ、あんまり難しいことを考えなくてもjQueryを使えば、JSONだろうがJSONPだろうが同じような感覚で扱えてしまうのが素晴らしいところ。
さて、今回ハマったのは表題の通りで、jQueryを使って同じドメイン内のJSONPからのデータ取得がIE(7,8,9)で失敗するという現象

同じドメインでデータ取るならJSONでいいのだが、別ドメインからのアクセスも想定して運用する前提であり、且つIE7まで対応するということでJSONP方式である必要があった。
問題の現象としては、ドメインで動かしている分にはデータ取得できるが、JSONPと同じドメインに置くと、ステータスコードが200で正常にアクセスできているにも関わらず "parsererror"が発生する(IE限定)というもの。
結論から言うと、jQueryAjaxアクセス先のドメインが同じかどうかで処理を分けていたらしく、別ドメインだとJSONPをscriptタグで読み込んでコールバック関数を実行させていたのだが、同じドメインのときはXMLHttpRequestに切り替えてしまっていたようだ。それが証拠に、同じドメインで動かしている時だけ、リクエストヘッダーに
X-Requested-With:XMLHttpReques
がついていた。
それでも、IE以外のブラウザではなぜ問題なくデータを扱えていたのか謎ではある。

解決策としては、
jQueryajaxメソッドのパラメータにcrossDomain:trueを設定することだ。これで、同じドメイン下でも強制的にクロスドメイン対応させる。

$.ajax{
url:'http:www.example.com',
dataType:'jsonp',
crossDomain:true,
success:function(data){
}
}


ただし、古いjQueryには設定されてないパラメータらしく、バージョン1.3.2ではダメだった。執筆時での最新版1.9.1に変えたところ、問題は解消した。

またもやハマったIE対応だが、今回はIEだけの問題でもない気はするものの、元を正せばIEXMLHttpRequestとは違う独自仕様を採用したことが根本原因な気がするので、やはりIEはシネ