- ベストアンサー
Ajax的な手法で取得したHTMLの表示
- XMLHttpRequestで非同期に取得したHTMLをポップアップのように表示させる方法を教えてください。
- 取得したHTMLは認識されないため、表示させる方法を教えてください。
- 非同期で取得したHTMLをJavascriptから操作する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> できればHTMLは表示するだけでよい形でもらい、それを操作して表示済みのHTMLに組み込むよう操作したいのです。 > もし方法をご存知でしたら教えていただければと嬉しいです。 XMLHttpRequestの仕様とJavaScriptのDOMの仕様を確認してみましたが、実現するのは難しいようです。 XMLHttpRequestのレスポンスがXMLの場合、responseXMLプロパティを使用してDOMとして操作できますが、これをそのままHTMLのある要素にappendChildすることはできないようです(自環境で試してみました)。 XMLHttpRequestでは文字列のようなデータのみを取得して、それをJavaScript内で加工するしかないようですね。 教科書では、 ---------- pop = createElement('div'); pop.id = 'popup'; caption = createTextNode(xhr.responseText); pop.appendChild(caption); ---------- とdivタグも動的に作っているようですが、HTML内にあらかじめ<div id="popup"/>を書いておき、 ---------- caption = createTextNode(xhr.responseText); getElementById('popup').appendChild(caption); ---------- とする方法もありますね。 回答になっていなくてすみません。 jQueryのようなAjaxライブラリを使用すればHTMLのロードができたと思うのですが・・・。
その他の回答 (2)
- himajin100000
- ベストアンサー率54% (1660/3060)
>#2 これでも駄目?(ただし,IEはサポートしない) https://developer.mozilla.org/en/DOM/document.importNode https://developer.mozilla.org/en/DOM/document.adoptNode
- x_jouet_x
- ベストアンサー率68% (162/236)
> pop = document.getElementById('popup'); > document.body.appendChild(pop); 上記のように記述しても、XMLHttpRequestでテキストやHTMLを取得しても呼び出し元のHTMLの要素には追加されていないので、document.getElementById(...)を使用しても取得できません。 XMLHttpRequestで非同期に取得したテキストやHTMLは、XMLHttpRequestオブジェクトのresponseText、またはresponseXMLで参照できます。 つまり、変数xhrをXMLHttpRequestオブジェクトだとすると、 xhr.responseText; xhr.reponseXML; でそれぞれ参照できます。
お礼
pop = xhr.responseText; とし、 alert(pop); としたら確かにテキストを取得することはできました。 ここからさらに、取得したテキストをHTMLとして使用し、 document.getElementById('popup'); でいろいろ操作するようにする方法はありますでしょうか? 教科書には THIS IS AJAX TEST!! という文字列だけを非同期で取得し、 pop = createElement('div'); pop.id = 'popup'; caption = createTextNode(xhr.responseText); pop.appendChild(caption); というようなやり方で動的にdivタグ、ID等をくみ上げていくのですが、 できればHTMLは表示するだけでよい形でもらい、それを操作して表示済みのHTMLに組み込むよう操作したいのです。 もし方法をご存知でしたら教えていただければと嬉しいです。
お礼
わざわざ調べていただきましてありがとうございます! その上試してまでいただけるとは、非常に良い方なんだろうなと想像しております。 XMLので受け取るのはまだちょっと敷居が高く感じてしまうので、とりあえず教科書通りにやってみようかと思います。 ライブラリも近々手を出してみる予定です!とてもすっきりしました。 感謝です。