Ajaxでウインドウ出力について

このQ&Aのポイント
  • Ajaxを使用してHTMLのコードを書いてWEBページを出力する方法について質問します。
  • CGI上でFormタグを使用せずにページ出力をする方法を探しています。
  • HTMLからAjaxに値を渡し、データベースとのやり取りをしてページを作成し、出力することは可能でしょうか。
回答を見る
  • ベストアンサー

Ajaxでウインドウ出力について

CGI上で、HTMLのコードを書いて、WEBページを出力(表示)することが出来ますが、それと同じようなことが、Ajax(Jqueryを使っています)で出来ませんでしょうか。 CGIを使ってやろうとしていたのですが、同じページでFormタグを多用しており、CGI以外の方法でページ出力をしようと思います。 HTMLからOnClickで値をAjaxに渡して、データベースとやりとりをし、Ajaxに値を戻してそれを元にページを作成して出力をさせたいのです。(別ウインドウを立ち上げで) このようなことは出来ますでしょうか。 また、出来るようでしたらどうやってプログラムを作成すればいいでしょうか。 教えてください。よろしくお願いいたします。

noname#223023
noname#223023
  • AJAX
  • 回答数6
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • kawai985
  • ベストアンサー率68% (17/25)
回答No.5

http://beauty.geocities.jp/nishihama985/on-off-div.htm たとえば一例ですが  ページ内に表示領域を作って表示すれば 同一ページ内でも 元データをくずさずに表示できます ON/OFFを押すと DIV要素が表示されます AjaxでTXTデータを表示できます DIV要素などで表示領域を用意して表示 という形でできます 分かりにくい時は再質問を

noname#223023
質問者

お礼

kawai985さん ご回答ありがとうございます。 そうですね。DIVを使って、対応したいと思います。そのような構成でしたら出来ると思います。 ありがとうございました。 また何かありましたらよろしくお願いいたします。 LancerVIIさんもお忙しい中ありがとうございます。 あまり時間をかけられないので、上記の方法で試してみます。 しばらくは回答を締め切らないでおいておきますね。

その他の回答 (5)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.6

こんにちは。 遅くなりましてすいません。 わざわざ待っていただきありがとうございました。 簡単なサンプルになりますが用意してみました。 http://hppg.moe.hm/okwave/sample/ 更新までは実装出来ていませんが、一覧を表示する画面内で詳細データみたいなものをAjaxで取得し、動的に表示します。 本来なら「更新」ボタンを押した時点でサーバへ送信し、データの更新をします。 こんなかんじにすると一覧表示画面で送信されるデータと詳細のデータについてわけて更新できますが、画面は一つで済みます。 ちょっと急いで作ったので効率化とかあまり考えていません。 参考程度にご覧いただければと思います。

noname#223023
質問者

お礼

LancerVIIさん お忙しい中ありがとうございました! サンプルページを拝見させて頂きましたが、とってもかっこいい!ステキなサンプルをありがとうございました!! ぜひ参考にさせて頂きます! ありがとうございました! また何かありましたらよろしくお願いいたします!

  • kawai985
  • ベストアンサー率68% (17/25)
回答No.4

http://note.chiebukuro.yahoo.co.jp/detail/n15842 http://beauty.geocities.jp/nishihama985/jquery-table/mypage.htm Ajaxのサンプルです データベースはTXTではだめでしょうか

noname#223023
質問者

お礼

kawai985さん ご回答ありがとうございます。 早速サンプルの方を拝見させて頂きましたが、こちらのサンプルはボタンがあるページと同じページ内に呼び出した結果を表示させるものだと思うのですが、 イメージしている状況が、数百行ある表の、ある1行に修正ボタンを置き、それをクリックすると、その1行が編集モードになって別ウインドウで立ち上がり、修正して更新ボタンを押すと、元の数百行あるページも更新されるというイメージです。 元のページの表の行数が大きいので、出来たら別ページを立ち上げて処理をしたいなあと思っているのですが、そのようなことは難しいのでしょうか・・・。 データベースはCGIから呼び出していますので、結果はテキストになります。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 >今回の件ですと、同じHTMLページ内で、Formタグを使ってCGIを呼び出していることが他にもあり、 表の行全体を更新するフォーム内に行ごとのボタンを用意したいから問題が起きているということでしょうか。 >ボタンを押す→Ajaxで値をとる→PerlでDB接続→値に基づいて行の内容を全部取得→ >新しくウインドウを立ち上げて内容をテキストボックスと一緒に表示→ >テキストボックスに表示したものを取得し、DBに登録しなおす(こちらはFormタグでPerl処理でやります) 無理にAjaxを使う必要が見当たらないのですがいかがでしょうか。 ボタンを押す→新しいウィンドウを開く→そのウィンドウに対してパラメータをpost→ xxx.cgiにてDB接続し、値を元に入力ページを表示→そこで入力された内容でDBを更新→サブウィンドウを閉じる→ 一覧ページを更新する マスタメンテ画面をイメージした場合私ならサブウィンドウは開かずに処理します。 ボタンを押す→隠してある入力フィールドと更新ボタンを表示→ 更新ボタンを押す→Ajaxにてxxx.cgiにpost→xxx.cgiで更新処理→ 更新処理後に戻ってきた値を利用して表に反映→入力フィールドを隠す どうせAjaxを使うならページの遷移を極力なくします。 >JSON、XML、PHPは使ったことがないので、よく分からないのです 扱いやすい物で戻してあげれば良いわけですのでこれじゃないとだめということはありません。 ただしAjaxを利用していくのであればJSONくらいは扱い方を知っておくと便利ですよ。 サーバサイドの言語も別にPHPじゃなくていいです。 上のような動きで想定があっているかつ少し時間をいただければサンプルを提示します。 違うイメージであれば補足下さい。 サンプルを作れる範囲であれば作ってみます。

noname#223023
質問者

お礼

LancerVIIさん ありがとうございます!! このページ内には行ごとにFormタグを使用するだけならいいんですが、その表のヘッダー部分(1行目)と、表(数百行あります)全体にかかるFormタグがあるため、重なってしまってうまく動作していないように思います。 はい、Ajaxを使わなくてもいいのですが、私の能力ですと、Formタグが使えないとするとAjaxかなあという安易な考えです(笑 > 隠してある入力フィールドと更新ボタンを表示 というのは、元々HTMLに埋め込んでおいて、それを表示したり隠したりすると言うことでしょうか? JSONは扱えた方がいいのですね。はい、今後の課題にします。 時々見かけたりするので、私にも出来るかなあと眺めていたりしたのですが、難しそうで、とりあえず使っていない状態です。 これから頑張ります。 恐らくイメージと合っていると思います。 サンプルを作ってくださると言うことで本当にありがとうございます!! よろしくお願いいたします!!

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >HTMLからOnClickで値をAjaxに渡して、データベースとやりとりをし、Ajaxに値を戻してそれを元にページを作成して出力をさせたいのです。(別ウインドウを立ち上げで) >PHPやJSONを使わないと今回のような状況は出来ませんでしょうか。。 データベースに接続する要件がある限りperlでも良い(ぶっちゃけDBと接続できれば何でも良い)ですがサーバ側での処理は必要です。 (データベースに接続して値を取得する必要があるため) PHPでサンプルを提示している意味は特に無く(開発環境が手元にあったため)サーバ側でHTMLまたはJSON、XMLでも良いですし、何らかの値を返せればそれを元に新しいウィンドウを立ち上げることが出来ます。 サンプルの「ウィンドウ起動」は難しいことはやっていなく、サーバ側から返ってきた文字をそのまま新しいウィンドウで開いているだけです。 >CGIを使ってやろうとしていたのですが、同じページでFormタグを多用しており、CGI以外の方法でページ出力をしようと思います。 実際どのような動きを想定(実現したいこと)しているか補足いただければもうちょっと踏み込んでアドバイスできると思います。

noname#223023
質問者

お礼

LancerVIIさん ご回答ありがとうございます。 今の私の能力ですと、HTMLからPerlを使ってDBとやりとりをし、その結果からページを出力したり、HTMLからAjax(Jquery)からPerlでDBとやりとりし、その結果に基づいてHTMLの構成を変えて出力したりなどのことは出来ます。 今回の件ですと、同じHTMLページ内で、Formタグを使ってCGIを呼び出していることが他にもあり、重なってしまって、Formタグがうまく動作しないため、 Formタグ以外の方法でDBとやりとりをし、その結果を用いて、HTMLページ出力をしたいと考えています。 例えば、表があって、その行ごとにボタンを置き、そのボタンを押すと、その行の内容を新しくウインドウを立ち上げてテキストボックスと一緒に表示し、テキストボックスに入力して修正したらそれをDBに登録し、元の表に反映させると言うことをしたいです。 イメージでは ボタンを押す→Ajaxで値をとる→PerlでDB接続→値に基づいて行の内容を全部取得→新しくウインドウを立ち上げて内容をテキストボックスと一緒に表示→テキストボックスに表示したものを取得し、DBに登録しなおす(こちらはFormタグでPerl処理でやります) ただ、JSON、XML、PHPは使ったことがないので、よく分からないのです。。 よろしくお願いいたします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 データベースから値を取得したものをJSONで返してあげても良いですし、HTMLを返すようにしてあげても良いと思います。 >CGI上で、HTMLのコードを書いて、WEBページを出力(表示)することが出来ますが、それと同じようなことが、Ajax(Jqueryを使っています)で出来ませんでしょうか。 >CGIを使ってやろうとしていたのですが、同じページでFormタグを多用しており、CGI以外の方法でページ出力をしようと思います。 同じようかどうかは微妙なところです。 データベースとのやり取りがあるのでどちらにせよ何らかのサーバ側の技術は必要になります。 以下PHP環境が必要ですがサンプルです。 PHP側でのセキュリティ等は考慮していません。最低限の動作サンプルです。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Ajaxでウィンドウ出力について</title> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript">google.load('jquery','1');</script> <script type="text/javascript"> $().ready ( function() { $('button:eq(0)').click ( function() { // サーバ上より非同期通信でHTMLデータを取得してウィンドウを開く var win = null; $.post ( 'q7267928_1.php', { val : $('input:eq(0)').val() }, function ( data ) { win = window.open ( '', 'newWin', 'width=600,height=300' ); win.document.write ( data ); win.document.close(); } ); }); $('button:eq(1)').click ( function() { // サーバ上より非同期通信でJSONデータを取得してウィンドウを開く var win = null; $.getJSON ( 'q7267928_2.php', { val : $('input:eq(1)').val() }, function ( data ) { win = window.open ( '', 'newWin', 'width=600,height=300' ); win.document.write ( '<html>' ); win.document.write ( '<head><title>' + data.title + '</title></head>' ); win.document.write ( '<body><h1>' + data.title + '</h1>' ); win.document.write ( '<p>data1 = ' + data.data1 + '文字</p>' ); win.document.write ( '<p>data2 = ' + data.data2 + '</p>' ); win.document.write ( '</body></html>' ); win.document.close(); } ); }); }); </script> <style type="text/css"> </style> </head> <body> <input type="text" /> <button type="button">ウィンドウ起動</button><br /> <input type="text" /> <button type="button">ウィンドウ起動(JSON)</button> </body> </html> ==== q7267928_1.php <?php $val = $_POST['val']; header ( 'Content-Type: text/html; charset=UTF-8' ); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>新規ウィンドウ</title> </head> <body> <h1><?= $val ?></h1> </body> </html> ==== q7267928_2.php header ( "Content-Type: application/json; charset=UTF-8" ); $array = array(); $array['title'] = $_GET['val']; $array['data1'] = mb_strlen($_GET['val']); $array['data2'] = date('Y/m/j H:i'); print json_encode ( $array ); ?>

noname#223023
質問者

お礼

LancerVIIさん ご回答ありがとうございました!! ですが、申し訳ございません。 CGIはPerlを使っているのと、JSONは使ったことがないため、せっかく教えて頂いたコードが全く分からない状態です。。(泣 PHPやJSONを使わないと今回のような状況は出来ませんでしょうか。。

関連するQ&A

  • Ajaxの動き

    googleと本で調べたのですが、今いちわからないため質問させてください。 (1)教科書から、Ajaxは、XMLをJavascriptでやり取りしている非同期通信という定義なのはわかりましたが、結局、AJAXを使うということは、HTMLに、<Script>のタグで、JQueryなどのパスを書くということなのでしょうか? AJAXは概念的なものであって、プログラムやモジュールそのものではないと捉えています。 (2)Ajaxによる非同期通信は、何をきっかけとして通信が始まるのでしょうか? 通常は、FORMがSUBMITされたときに、サーバにリクエストがいくという認識ですが そもそも、Ajaxは、何をイベントとしてハンドルしているのでしょうか?(何をきっかけに処理が始まっているのでしょうか?) HTMLに、<Script>のタグで、JQueryのパスを書くと、ハンドルする機能が使用されるのでしょうか? Ajaxでも「リクエスト」は行われているけれども、処理結果として戻されるものがXML形式であるだけだという理解で良いのでしょうか?

    • ベストアンサー
    • AJAX
  • jqueryのajaxに引数を指定

    ajaxを利用して外部HTMLを読み込ませたいのですが$.ajax()などをonclickイベントなどで呼び出すとき引数を指定してurlを設定することはできませんか イメージとしては 例えばjqueryでloadingpageという関数を作って HTMLを <input type="button" onclick="loadingpage(http://www.hogehoge.com);"> って感じにしてボタンをクリックするとhttp://www.hogehoge.comがページ内で読みだされるようにしたいです。

  • 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
  • 「SubmitせずにAjaxからCGIを呼び出して結果をHTML上に表

    「SubmitせずにAjaxからCGIを呼び出して結果をHTML上に表示したい」 HTMLファイル上にテキストボックスとそれと対になるラベル(ラベルじゃなくても良いのですが。。)のセットがいくつかあります。 テキストボックスにコードを入力したら、ラベルにそのコードに対応する商品名を表示したいと思っています。 テキストボックスにコードを入力後、フォーカスが離れたら(Onchangeで)Ajaxでそのコードの値を取得し、そのデータをCGIに渡してサーバにあるDBに接続し、その結果をHTML上のラベルに表示したいと思います。 Sbmitせずにフォーカスが離れた場合に、データをCGIに受け渡し、そのデータを画面遷移しないで、HTML上に表示するのはどのようにすればいいのでしょうか。 Ajaxを使えばいいと教わったのですが、色んなサイトを調べてみたのですが、Ajaxが初心者で、よくわからず、コードなどございましたら教えて頂けましたら嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • AJAX
  • AjaxからCGIへの接続につきまして、教えてください。

    AjaxからCGIへの接続につきまして、教えてください。 HTML上のtcdという名前のテキストボックスに入力された、データをテキストボックスのID名と、入力データをCGIに渡して戻り値をHTMLに反映させたいのですが、まずはAjaxからCGIへデータ渡すときに、下記のように記述しているのですが、「アクセスが拒否されました」というエラーがでて、CGIに接続できないみたいなのです。 HTMLもAJAXのファイルも、CGIも同一ドメインにおいてあります。 function ajaxcgi(tcd) { $.get('CGIのURL', {cd: tcd.name, name: tcd.value}, cgiajax); } function cgiajax(message, status) { alert(message + "\n" + "status:" + status); } テストでAlertを使って試したら、tcdテキストボックスの名前も入力データも取得できています。 下記URLを参考にさせて頂きました。 http://www.s-memo.net/blog/2006/12/jquery.php もちろんCGIのURL間違いではありません。 CGI側も、テキストを出すだけにしているのですが、その出力もできないみたいです。 これはどのような原因が考えられるでしょうか。 おわかりの方いらっしゃいましたら教えてください。 よろしくお願い致します。

    • ベストアンサー
    • AJAX
  • jQuery,Ajaxでcgiに接続する方法がわからなくて困っています

    jQuery,Ajaxでcgiに接続する方法がわからなくて困っています。 あるデータベースのあるテーブル(仮にpersonテーブル)を参照して、html上のformタグに文字を入れるとselectボックス内に表示されるものがマッチしたものが表示されるようなものを作りたいと思っています。 例えば、 personテーブルのperson_nameカラムには(秋本、本田、寺西、寺本、戸田、吉岡)という情報が入っていて、selectボックス内は最初全ての人名が出ているとします。 person.htmlというテンプレートのformのところに【寺】と入力するとselectボックス内は寺西と寺本だけ表示される。 そのようなものを作りたいと思っていますがうまくいきません。何か参考になるURLだけでもかまいませんのでご教授下さい。 できればサンプルソースがあればうれしです。

    • ベストアンサー
    • AJAX
  • Jquery.ajaxでHTML読み込み

    現在、Jquery.ajaxを使って外部HTMLの読み込み処理を行い、処理完了後にフェードで表示させるということをしているのですが、読み込んだHTMLに貼り付けてある画像が読み込まれる前にHTMLが表示されてしまい、困っています。 Jquery.ajaxでは内包されている画像の監視まではできないのでしょうか? 下記が今作っているコードです。 $contest.css({ "opacity": 0 }); $.ajax({ type: "GET", url: "hoge.html" dataType: "html", success: function(data) { $contest.html($(data).find("#hoge")); }, complete: function() { $contest.stop().animate({ "opacity": 1 }, 1000, "easeOutCubic"); } }); おわかりになる方、ご教授お願いします。

  • PHP4でのAjax データ出力形式について

    こんにちは PHP4.4.9でAjax通信時のデータ出力形式をどうしようか悩んでいます。 やりたい事は、HTMLのSELECTタグの中身を入れ替える事です。 普段は主にjsonでデータのやり取りをしていますが、PHP5.2以降という事でXMLにしようとしたのですが、今時じゃないのかなかなかサンプルが見つからず・・・ PEARやPECLでのライブラリ等の追加は都合上、行えません。 自前でXMLやJsonを作る事はしたくないので、よいサンプル等あればご教示ください。

    • ベストアンサー
    • PHP
  • ajax反映後のjqueryが動かない

    色々と簡略化してますが、以下のようなajaxを交えたコードを書いています。 <script type="text/javascript"> $(function() { /* 初期変数処理 */ ............ /* HTML内object操作 */ ............ /* ある箇所をclickでイベント */ $('#hoge').click(function(e) ←(1)画面アニメーション { test3(); } /* 数秒後に(1)を自動実行 setInterval(function(){ ...... } /* formを使って検索 */ $('#form').submit(function(event) { event.preventDefault(); ........(中略) $.ajax({ type:"POST", url: "hoge.php", data:{data: data}, timeout: xxxxx, beforesend: { ........ }, complete: { ........ } success: function(data){ ......... ← (2)HTML内object操作、jquery部分は避ける test2(); } }); return false; }); function test1(){ ........ }; function test2(){ ........ }; function test3(){ ........ }; }); </script> [HTML] <form id = "form"> <input name="list"/> <button>送信!</button> </form> <div id="hogehoge"> ................. ←(3)検索で内容変更する箇所 </div> としているのですが、一度送信ボタンを押して(2)の処理を行った後、 (1)のアニメーションも含め、すべてのjquery要素が使用できなくなってしまいました。 http://semooh.jp/jquery/api/events/live/type,+fn/ によればliveを使えばclick処理はできるとありましたが、これでも動きません。 setIntervalの効果や、submitイベントすら動きませんでした。 なお、検索前は問題なく動作します。通常時は問題ないのですが、submit後からおかしいので、 ajaxに関してなにか見逃している箇所があるとは思うのですが、 どこが悪いのかはっきりと検討がついていません。 どなたかお知恵をお貸しいただけませんでしょうか。宜しくお願いします。

  • PHPのフォームとAjaxを組み合わせたいのですが

    簡潔にコードを書かせて頂きますが、PHPとjQueryによるAjaxを連携させたいと考えています。 まずform.phpのフォームをsubmitし、その内容をpost.phpへ送り、リダイレクトにてres.phpへ送るという、PHPの基本的な動きをさせますが、 その結果はres.phpという新しいページではなく、Ajaxにてform.phpの<div id="text1">部に元々書かれている<form>ではなく、res.phpの出力内容を出力したいと考えております。 この場合、どのようにjQueryコードを記述すればいいのでしょうか? 色々考えて試してみたのですが、上手くいきませんでした。 自分はform.php、post.php、res.phpという3つのファイルを用意していますが、もしかしたらori.phpという出力用のファイルを用意し、その<div>空間内にform.phpのフォームやres.phpの結果をAjaxによって出力するのかなとも思いましたが、良く分かりませんでした。 アドバイス頂けないでしょうか? 宜しくお願い致しします。 (( form.php )) <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text1"> <h2>その1</h2> <form action="post.php" method="POST" id="form" name="form" > <input type="checkbox" id="news" name="news" value="news" /> ニュース <br /> <input type="submit" name="submit" value="submit" /> <input type="reset" name="reset" value="reset" /> </form> </div> </body> </html> (( post.php )) <?php session_start(); session_regenerate_id(TRUE); $_SESSION["news"] = "news 表示"; $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'res.php'; header("Location: http://$host$uri/$extra"); (( res.php )) <?php session_start(); session_regenerate_id(TRUE); ?> <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text2"> <h2>その2</h2> <?php $_SESSION["news"]; ?> </div> </body> </html> <?php session_destroy(); $_SESSION = ''; ?>

    • ベストアンサー
    • PHP