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に日本語の情報があるなんて知らなかった、ありがたい。
ピンバック: Ajax, jQueryでXMLをParseそしてAccess-Control-Allow-Originについて « イナヅマTVログ