GeekFactory

int128.hatenablog.com

jQueryのクロスドメインAJAXをIEに対応させる

XMLHttpRequest Level 2 に対応しているWebブラウザは、(ある条件下で)異なるドメインAJAXリクエストを投げることが可能です。jQueryでは以下のように書けます。

$.ajax({
  context: this, 
  type: 'POST',
  url: 'http://www.example.com/hoge', /* 異なるドメイン */
  data: something,
  dataType: 'json',
  success: function (v) {
    alert(v);
  }
});   

ただし、このコードは Chrome, Safari, Firefox 3.5+ でのみ動きます。IE 8+ で動かすには XMLHttpRequest の代わりに XDomainRequest を使う必要があります。jQueryは今のところ XDomainRequest に対応していませんが、下記の xdr.js を読み込むことで IE 8+ でも同じコードが動くようになります*1

試しに 形態素解析 で xdr.js を適用してみたところ、Chrome に加えて IE 9 でも正しく動きました。これは便利ですね。

ちなみに、 REST サービス側は以下の仕様としています。

  • Access-Control-Allow-Originヘッダを返す。
  • Access-Control-Allow-Methodsヘッダを返す。
  • POST, OPTIONSメソッドを実装する。OPTIONS はプレフライトに対応するため。

ご参考まで。