イナヅマTVログ

[JavaScript]あれっ、IEはCross DomainだとXMLがとれない?とれない!

| 1件のコメント

JavaScriptでドメインを超えてXMLを取得しようとしています。
出力側でAccess-Control-Allow-Origin対策のためにheaderを追加しています。
Ajax, jQueryでXMLをParseそしてAccess-Control-Allow-Originについて

header("Access-Control-Allow-Origin: *");


jQueryを使用しています。

$.ajax({
    url: 'http://example.com/example.php',
    dataType: 'xml'
}).done(function (data) {
        console.log('done', data);
    }).fail(function (jqXHR, textStatus) {
        console.log('fail', jqXHR, textStatus);
    });

ajaxを実行しているドメインと、取得しにいっているexample.comは異なっています。

IE以外は取得できるなぁ〜

headerにXML付けてみた。

header("Content-type: text/xml; charset=utf-8");

やっぱりIEだけfailになる。

IEだけ処理を分岐させてみた。

if ($.browser.msie) {
	$.ajax({
	    url: 'http://example.com/example.php',
	    dataType: "text",
	}).done(function (data) {
	        var xmlDOM = new ActiveXObject("Microsoft.XMLDOM");
	        xmlDOM.loadXML(data);
	        xmlDOM.async = false;
	    }).fail(function (jqXHR, textStatus) {
	        console.log('fail', jqXHR, textStatus);
	    });	
}

dataTypeをtxtにもしたけど、failになる。

同じドメインだと最初のコードでXMLは取得可能なのでクロス・ドメインがまずいのかも。

ま、運用案件でクロス・ドメインでXMLをとってきてというのは無いけど、テスト運用中だと良くある話なので解決できると助かるなーと。
Access-Control-Allow-Origin への対応が違うんだよね?きっとIEだけが。

解決できないすかね。

update 2012-12-25
jQuery.ajax APIをよく見てみると”crossDomain”というOptionがありました。
http://api.jquery.com/jQuery.ajax/
Defaultはfalseだそうです。
trueに設定し試してみました。
IE 10は”XMLHttpRequest には Cross Origin Resource Sharing (CORS) が必要です。”とエラーを表示しますが、取得できました。
IE 9以下は取得できませんでした。

html5rocks.comに興味深いエントリーがありました。
XMLHTTPREQUEST2 に関する新しいヒント
HTML5 Rocksに日本語の情報があるなんて知らなかった、ありがたい。