• 締切済み

jqueryでの外部XMLファイルの読み込み

今、ie8上でjqueryを使って、別ドメイン上にあるXMLファイルを読み込もうとしています。 ieはfirefoxとはちがい、なかなかうまくいきませんでした。 (http://www.netagent-blog.jp/archives/51509761.html) この上記のページを参考に、XDomainRequestのラッパーを作成してやってみたのですが、ファイルを読み込むことができませんでした。 一応、ソースを上げます。 function hookXhr(){ // この部分は参考にしたページのとおりです。長いので省略しました } $(document).ready(function(){ var proxy = "http://allow-any-origin.appspot.com/"; $.ajax({ url: proxy + "http://www.xxxx.xx.xx/today.xml", type: "GET", dataType: "xml", cache: false, xhr : window.XDomainRequest ? hookXhr : undefined, success: init }); }); 何か良い方法がありましたら、教えていただけると幸いです。よろしくお願いいたします。

noname#156610
noname#156610

みんなの回答

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

No1,No2回答者です。 今日は試す時間無いけど... jQueryのサイトをよく見ると、jQuery 1.5 から  $.ajax()に、crossDomainオプションがしっかり追加されてるぞ、 という事は、そもそも jQuery 1.5 使えばそのラッパー「hookXhr()」いらないんじゃない。 http://api.jquery.com/jQuery.ajax/

noname#156610
質問者

お礼

早速の返信、ありがとうございます。 jquery は microsoft の 1.5.1 を使っています。 教えていただいた、ラッパーなしで crossdomain オプションを true にするやり方を、ie8で試したのですが読み込めませんでした。 教えていただいたMSXML2.DOMDocument.6.0を使うやり方を試してみたいと思います。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

No.1です。 その場しのぎですが、とりあえずラッパーはそのままでも ・・・・・・   dataType: "text", ・・・・・・ にして、 function init(data,textStatus,jqXHR){  var xml;  if(window.ActiveXObject){   xml = new ActiveXObject("MSXML2.DOMDocument.6.0"); //又は3.0   xml.loadXML(data);  }else{   xml = jqXHR.responseXML;  }  alert(typeof xml); } で、XMLとして扱えます。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

ちょっと、調べて見ました。 そもそも、IEの XDomainRequest Object 自体が  responseText のみで responseXml が無いような雰囲気です。 http://msdn.microsoft.com/en-us/library/cc288060%28VS.85%29.aspx  そこで、dataType: "text" にしてやるとIEでも成功します。 (※まず、このラッパーは jQuery 1.4 用みたいですね。jQuery 1.5だとdataType: "text"でもIEで、失敗します。) >何か良い方法何か良い方法がありましたら、....  IEの場合は、とりあえずレスポンスデータをTEXTで受け取って、  Msxml2.DOMDocumentでDOMに流し込んでやってはどうでしょう。

関連するQ&A

  • jquery ajax 外部html 読み込み

    現在、数年前にjquery(v1.4.3)を用いて制作したページの更新を行っており それに伴いjqueryも最新版(v1.11.1)への移行を試している最中なのですが ajaxの外部htmlを読み込む処理が実行されなくなり困っております。 旧バージョンとではメソッドの記述法が異なることは理解できておりますが 色々と書き換えてみたものの、以前のように動作させる事ができません。 以下がそれぞれの記述になりますが、もし問題にお気付きになられましたら ご指摘いただけますと幸いです。 jquery(v1.4.3): function loadAdd(obj){ $.ajax({ async: true, type: 'GET', url: tgtURL, dataType: 'html', cache: false, success: function(html){ var $div = $("#add"); $div.html(html); }, error: function(xhr, status, errorThrown){ alert("not found."); } }); } jquery(v1.11.1): function loadAdd(obj){ $.ajax({ async: true, type: 'GET', url: tgtURL, dataType: 'html', cache: false, }) .done(function(html){ var $div = $("#add"); $div.html(html); }) .fail(function(xhr, status, errorThrown){ alert("not found."); }); }

    • ベストアンサー
    • AJAX
  • jQueryで複数ファイル読み込みを検知する方法

    jQueryでHTTP通信でjsonファイルを取得する場合、 ファイルが一つだけなら $.ajax({ url: path, type: "GET", dataType: "json", success: function(json, status, xhr) { }, error: function(xhr, status, errorThrown) { }, complete: function(xhr, status) { } }); のようにsuccessコールバックなどでデータを取得すればよいのですが 複数ファイルをajax()により取得し、全てのファイルダウンロードが完了したのを 待ってから処理を走らせたい場合どうすればよいのかわかりません。 任意の型のイベントを発生させて、それに対するハンドラ割り当てができればよいのですが javascriptに不慣れなこともあり、調べてもその方法がわかりませんでした。

  • jQueryを使用してxmlを取得 ieでエラー

    wordpressで固定ページからxmlを出力するテンプレートを選択してます。 ページにアクセスした時に吐き出されるxmlは <?xml version='1.0' encoding='UTF-8' ?> <common> <days>01</days> <days>02</days> <days>03</days> <days>04</days> <days>05</days> <days>06</days> </common> です。 別のhtmlファイルの方でjQueryで <script> $(document).ready(function () { $.ajax({ type: "GET", url: "xmlをはきだすアドレス", dataType: "feed", success: xmlParser, error: function(){ alert('Error loading XML document'); } }); }); function xmlParser(xml) { alert($(xml).children("days").length); } </script> と書いています。 この場合firefoxやsafari,chromeではalertで6と表示されますが ie6,7,8だと0となってしまいます。 どなたかieでもalertで6と表示させる方法を知っている方いませんか?

  • 複数のxmlを同ページに読み込みたい

    同じ項目をもつxmlをカテゴリ別に複数作成された状態で、同一html上にjqueryで読み込みたいです。 var xmlFiles=new Array("a.xml","b.xml","c.xml"); $(document).ready(function(){ for(var i=0;i<xmlFiles.length;i++){ $.ajax({url: '',type: 'GET', dataType: 'xml',timeout: 100000,error: function(){alert('xmlファイルの読み込みに失敗しました');}, success: function(xml){ 処理 } }); } }); これだとおかしくなってしまいます。 $.ajax~~を読み込み名を変えて繰り返し記述してもうまくいかないのですが、これは1つのxmlにするしかないのでしょうか。

  • jqueryでXML内テキストをオブジェクトに

    XML内のテキストをオブジェクトのコンストラクタの引数に渡すことはできますか? 例:(これではできませんでした。) -------------------------------------------------------------- ffdata.xml <?xml version="1.0" encoding="UTF-8" ?> <ffdata> <chardef><!--キャラ登場時のステ(name,hp,mp,str,fig,tec,agi,int,mnd)--> <ch1>アラゴルン,400,80,10,7,8,10,6,6</ch1> </chardef> </ffdata> -------------------------------------------------------------- main.html <script> //************************************************オブジェクト function charctor(name,hp,mp,str,fig,tec,agi,int,mnd){ this.name= name; this.hp = hp; this.mp = mp; this.str = str; this.fig = fig; this.tec = tec; this.agi = agi; this.int = int; this.mnd = mnd; } //************************************************ffdata.xmlファイルを読み込み $(document).ready(function(){ $.ajax({ type: "GET", url: "ffdata.xml", dataType: "xml", success: function(xml) { createObj(xml);}, error: function(){alert("xmlファイルの読み込みに失敗しました");} }); }); //************************************************オブジェクト作成 function createObj(xml){ aragorn = new charctor($(xml).find("chardef").find("ch1").text()); $("#main").html(aragorn.str);//************************#main内に表示 } </script> <body id="main"> </body> ------------------------------------------------------------- 思いつきでやってうまく行かなかったんですが、何か出来そうな気がするんです。 間違いがあったら指摘していたけると助かります。

  • jQueryでXMLを操作

    jQueryでXMLを操作 最近jQueryを勉強しはじめました。 jQueryでXMLを読み込んで、item val="new"を含んだデータのみ<ul></ul>内に表示したいのですが うまくいきません。 ご教授願います。 また、こういったjQueryの使い方に関する、お勧めの本やページ等ございましたら 教えてください。宜しくお願い致します。 -------------------------XML Data------------------------- <data> <item val="new"> <link>01.html</link> <name>ほげ田 ほげ太</name > <photo>dummy.jpg</photo> </item> <item val="new"> <link>02.html</link> <name>ほげ田 ほげ子</name > <photo>dummy.jpg</photo> </item> <item val="new"> <link>03.html</link> <name>ほげ山 ほげ太</name > <photo>dummy.jpg</photo> </item> <item> <link>04.html</link> <name>ほげ山 ほげ子</name > <photo>dummy.jpg</photo> </item> </data> -------------------------JavaScript------------------------- $(function(){ $.ajax({ url: 'doctors/data.xml', dataType: 'xml', timeout: 1000, error: function(){ alert("xmlファイルの読み込みに失敗しました"); }, success : function(data){ $("item",data).each(function(){ if($("item",this).attr("val") == "new"){ $(".column").append('<li><a href="'+$("link",this).text()+'"><img src="image/'+$("photo",this).text()+'" alt="'+$("name",this).text()+'" title="'+$("name",this).text()+'"></a></li>'); } }) } }) $("li.noJavaScript").remove(); }) -------------------------HTML------------------------- <div id="wrapper"> <ul class="column"> <li class="noJavaScript">javaScriptを有効にしてください。</li> </ul> </div>

  • JQueryはAJAXとは無関係??

    質問◆JQueryおよびJQueryMobileは「AJAX」とは無関係なのでしょうか? 「JQueryMobileを使っているとき、DOMによってHTMLを動的に差し替えている」という認識なのですが、 特にRequest関連の記載をJavaScriptで記載していない限り、AJAXの処理は行われないのでしょうか? それとも、 JQuery Mobileを使っている場合は、ページ遷移などで、プログラマが意識していなくても(独自にプログラムを書いていなくても) AJAXの処理が行われているのでしょうか? /************************************/ サーバへのリクエストはなくても、1つのマシン内の、HTMLファイルとHTMLファイルの間で、 HTTPで通信がされるということはないと思っています。 (※基本、HTTPはクライアントとサーバの間のときしか使われないのですよね?) JQueryの技術情報のサイトを見ていると、 よく「document.ready」と書かれていたりするソースを見かけますが、 これはAjaxとは関係なく(通信とは関係なく)、 また「xhr.send」も書かれていないHTMLは、AJAXは使われないという理解です。 (「Form、submit」とも関係がない) XMLHttpRequestも「HttpRequest」とあるわけですし、 「Form、submit」を書いているときに行われるわけではないけれども、かわりに、 「xhr.send」とJavaScriptで実行されたタイミングで走る処理であり、 その際、「サーバから返される情報がXMLのデータ形式で(XML以外もですが、、)」だという理解なのですが、合っていますでしょうか?

    • ベストアンサー
    • AJAX
  • JQueryでAjax通信をキャンセルした時につて

    JQueryでAjax通信時に、abort()でキャンセルを行うと通信はキャンセルになっているようですが、 サーバー側(Ajaxで呼ばれた処理)は、最後まで処理されてしまいます。 abort()を実行させた時に、サーバー側の処理まで中断させる方法はありますでしょうか? 実行と中止は以下のような感じで書いています。 Ajax実行 arrXhr = $.ajax({ dataType: "json", type: "POST", url: "xxxxxxx.php", async: true, cache: false, data: sendData, success: function ( data ) { }, error: function ( XMLHttpRequest, textStatus, errorThrown ) { } }); 中止 xhr.abort();

  • javaScriptからxmlファイルを読み込みたい。

    strutsで開発を行ってるのですが、javaScriptからweb.xmlに設定してあるsession-timeoutの時間を取得したいのです。 javaScriptからxmlファイルをparseできるみたいで、ネットを参考に書いてみたのですが。うまく動きません・・・以下がソースです。 jsファイルをweb.xmlと同じ階層において試したのですが 、うまく読み込めていないようなのです。どなたかご教授お願いできないでしょうか? javaScriptからweb.xmlを読み込むことは不可能なのでしょうか? ちなみにブラウザはIE6.0以上限定です。 function readXML(){ xml_doc = new ActiveXObject("Microsoft.XMLDOM"); xml_doc.async = false; if(xml_doc.load("web.xml")){ alert("success!"); }else{ alert("error!"); } }

  • ajaxによるIEの文字化け回避策について

    貴重な場をお借りして質問させていただきます。 ajaxのIE対応について困っています。 やりたいことはボタンを押したら外部からhtmlを 読み込むということなのですが、 どうしてもIEだけ文字化けしてしまいます。(ボタンを押したら・・・という記述は下記には書いていません。) 文字コードがutf-8ではないということが原因なのですが 出来ればサーバーサイドでの記述なしに解決したいと思っています。 読み込むtest.htmlも親のindex.htmlもshift-jisでして、 この文字コードは変更できず困っております。 下記に現状のソース(ajax部分のみ)を記述したものを表記いたしますので、どなたかお力を貸していただけないでしょうか。 どうかよろしくお願いいたします。 ------------ jquery------------- $(function(){ $.ajaxSetup({  beforeSend: function(xhr){   xhr.overrideMimeType("text/html;charset=Shift_JIS");  } }); $.ajax({  type: 'GET',  url: 'test.html',  dataType: 'html',  success: function(data) { $('#wrap').append(data);  } }); }); ------------ test.html------------- <ul id="hoge"> <li>ここに画像やテキスト</li> </ul>

    • ベストアンサー
    • AJAX

専門家に質問してみよう