質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

4192閲覧

ページを遷移せずに表示する

SugiuraY

総合スコア317

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2017/04/14 02:48

編集2017/04/14 03:21

Ajaxに未だ不案内であり、非同期通信ができるということしか知らず
抽象的に質問かもしれず申し訳ございませんがお伺いさせてください。

現在、下記のように左右のBoxA及びBoxBがあり、甲を見たい場合「甲を表示する」を選択することにより
ページを遷移せずにBoxBにxxx.phpの内容を表示させたいと考えております。
もちろん、その後同じページで乙を見たい場合にはページを遷移することなく、「乙を表示する」を選択するにより
同様に閲覧可能という仕組みです。

もちろん、選択肢が少なく単純なものであれば
描写するdivを用意しておきJSでclickイベントでshow/hide等で切り替え表示すれば実現できますが
選択肢が非常に多く、表現するものが複雑なため、予めHTMLの要素にこれらを読み込ませておくのは
非現実的か思っております。

技術的にこのようなことが可能であるのか?また、このようなことを実装したい場合参考になるようなサイト等をご教示頂ければ
幸いわいです。
宜しくお願いいたします。

HTML

1<div id="boxA" style="float:left;width:500px;height:800px;border: solid 1px #454545"> 2 <p><a href="xxx.php">甲を表示する</a></p> 3 <p><a href="yyy.php">乙を表示する</a></p> 4 5</div> 6 7<div id="boxB" style="float:left;margin-left:10px;width:500px;height:800px;border: solid 1px #454545"> 8 9</div> 10

改めて、より具体的な目的を書きに加筆させて頂きます。

単純化するつもりでアンカータグにしましたが、実際には外部のファイルの特定のタグをDOM(PHP)で抽出して表示させることが目的です。ユーザーの操作でboxAでkoというvalueを取得し、これを元に特定のディレクトリからko.phpをloadして、id="ko_1"のタグを取得し、BoxBに表示するということになります
ko.php

<div id="ko_1"></div> <div id="ko_2"></div>

otsu.php

<div id="otsu_1"></div> <div id="otsu_2"></div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

甲がxxx.phpで乙がyyy.phpだとしてそれをアンカーで呼び出せるようになっているということは
それぞれがhtmlとして完結していると考えてよいですね?
そうなると非同期で甲や乙のデータを持ってきても、もろもろの競合が発生するので
BoxBに表示することは困難です。

あまりお勧めできませんがご希望の処理はiframeでなさるのが妥当です

追記

xxx.phpやyyy.phpを部品として取り込むのであればこうしてください

  • mypage.htm

HTML

1<style> 2#boxA{float:left;width:500px;height:800px;border: solid 1px #454545;} 3#boxB{float:left;margin-left:10px;width:500px;height:800px;border: solid 1px #454545;} 4.xxx{background-Color:lime;} 5.yyy{background-Color:aqua;} 6</style> 7<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 8<script> 9$(function(){ 10 $('#boxA a').on('click',function(e){ 11 var me=$(this); 12 $.ajax({ 13 url:me.attr('href'), 14 success:function(data){ 15 $('#boxB').html(data); 16 }, 17 }); 18 e.preventDefault(); //アンカーのclickを無効にする 19 }); 20}); 21</script> 22 23<div id="boxA"> 24 <p><a href="xxx.php">甲を表示する</a></p> 25 <p><a href="yyy.php">乙を表示する</a></p> 26</div> 27<div id="boxB"> 28</div> 29
  • xxx.php

PHP

1<div class="xxx">test</div> 2<div class="xxx">test</div> 3<div class="xxx">test</div>
  • yyy.php

PHP

1<div class="yyy">test</div> 2<div class="yyy">test</div> 3<div class="yyy">test</div>

投稿2017/04/14 03:01

編集2017/04/14 03:35
yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/04/14 03:08

なるほど、非同期ゆえの競合に注意すべきということですね。
yambejp

2017/04/14 03:16 編集

ちなみに「非同期」の意味を曲解しているように見えます。 バックグラウンドでデータを取りに行くことと、 その処理が終わるまで処理を専有することは似て非なるものです 今回のケースで言えば非同期はまったく関係なく、 独立したHTMLを別のHTMLに流し込むことは理論的に困難である ということです ajaxの得意分野は主に以下2点です ・(htmlに取り込まれる前提の)部品をとりにいくこと ・データをとりにいくこと(おもにjson)
SugiuraY

2017/04/14 03:23

単純化の目的でアンカータグにしましたが、正確に目的を加筆させて頂きました。 誤解を招き申し分けございません。 特定のファイルの特定のタグを抽出することが目的であるため、簡潔するHTMLではないとご理解頂ければと思います。
yambejp

2017/04/14 03:36

ajaxでhtmlの部品をとってきて組み込む方法を追記しておきました
KSwordOfHaste

2017/04/14 03:42 編集

理解不十分のままのコメントだと混乱を招くかも知れませんが…最初の自分のコメントは 「あるボタンを押したらサーバーへデータを要求し、応答受信時にhtmlへ反映させるといった処理を複数のボタンに書くとAボタンを押した処理が裏で継続中にBボタンがおされるといった状況でBを無効にするなりA,Bが動いても問題ないようにするなり期待通りの振る舞いをさせることができるかどうか気にして設計しなければならないということかな?」 と感じたことからの発言です。質問者さんのやろうとしていることについて何が最適かを充分念頭に置けた上でのコメントでないので本件に関係しない話あるいは自分の根本的勘違いでしたらスミマセン。 --- 説明がめんどうなレベルの話であればスルーしてください m(_ _)m
yambejp

2017/04/14 03:46

うまく伝わってないようであれば申し訳ないです >非同期ゆえの競合 という言葉の問題を指摘したかっただけです。 ajaxは同期処理(非推奨ですが)も可能で、たとえ同期処理でやっても 競合はおこります・・・という意図です
KSwordOfHaste

2017/04/14 03:50

同期でも競合が起こるという点でしたか。それは認識できてなかったのでdynamic HTMLについて学びながら具体例を知っていこうと思います。コメントありがとうございました。
guest

0

結論からいえばajaxとはまさにそのようなことをするための方式と言えると思います。サーバーとブラウザー間の通信を前提とするため必然的に非同期になるわけですがajaxというキーワードで検索すると多数のサンプルや解説がでてきますのでわかりやすそうなものを漁ってみるとよいと思います。

jQueryとajaxのサンプルが載ってるこんなページなんかもよいかも知れません。

自分もWebそのものに暗くこうしたことを学び中です。

投稿2017/04/14 02:58

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/04/14 03:17

コメント、ご回答ありがとうとざいます。 ご提示いただきました、ページも是非参考にさせて頂きます。
guest

0

描写するdivを用意しておきJSでclickイベントでshow/hide等で切り替え表示すれば実現できますが

選択肢が非常に多く、表現するものが複雑なため、予めHTMLの要素にこれらを読み込ませておくのは
非現実的か思っております。

「表現するものが複雑」がどういう複雑さかはわかりませんが、あとからJavaScriptでHTMLを挿入するならば複雑さの問題はどちらも同じではないでしょうか。わざわざ別ファイルに書き出すほうが問題が複雑になると思います。

投稿2017/04/14 05:20

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/04/14 06:19

コメントありがとうございます。 上記に加筆しておりますが、より具体的には外部に既に1000近くのファイルがあり、ここからユーザの選択に応じて、必要なファイルの関連するタグのnodeValueを取得します。と言ってもこのそれぞれのタグの中身も2Mを超えるようなデータのため、これを予めHTMLに読み込むべきか否かに懐疑的でした。ajaxに明るくないため、それと比較してどのように相違するかは未だ分かりませんが、私個人の印象としては、ページを遷移せずにこの必要タグ部分だけを取得しにいくため、処理の負担が大きく相違するのではないかと想像をした次第でございます。もちろん、実際にajaxでの処理はそのようなものではないという可能性もございますが。 宜しくお願い申し上げます。
kei344

2017/04/14 06:39

文字列で2Mbyteの分量ならページを普通に移動するほうが良いとは思います。それか、「1000近くのファイル」の特定のファイルを取得するページを作って、それをiframe内に表示させるとかでしょうか。(選択したタイミングでiframeを書き換える)
SugiuraY

2017/04/14 06:49

コメントありがとうございます。 なるほど、承知を致しました。そのような発想に至らなかったため、大変助かります。 宜しくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問