2012-04-20 22 views
0

3つの基本要素、selectボックス、button、&テーブルを持つWebページを作成しています。高レベルから、ユーザは要素を選択し、ボタンをクリックする。ボタンをクリックすると、PERLスクリプトが実行され、データがmySQL dbのテーブルに格納されます。これらのものはすべて正常に動作します。PERLとjquery-ajaxを使用してmysqlデータを取得する

今、動的テーブルを使用してDBテーブルの値をHTMLファイルに戻そうとしています。しかし、私が見つけたすべてのソースにはCGIファイルにhtmlタグを記述しています。 CGIがテーブルIDを知っているとわからないので、これが正しいとは思わない。たとえ値を渡していても。また、私は私のjsファイルが2つの別々のAJAX呼び出しを持っている間違っていることを知っていますが、それは私の頭の中で論理的に処理しているホームです。

CGIファイルまたはJSファイルを修正して何が最初に来るのか分かりません。

HTMLコード(index.htmlを):

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js" charset="utf-8"></script> 
     <script type="text/javascript" class="jsbin" src="C:/xampp/DataTables/media/js/jquery.dataTables.js" charset="utf-8"></script> 
     <script type="text/javascript" src="js/main.js" charset="utf-8"></script> 
     <script type="text/javascript" src="js/RunPerlScript.js" charset="utf-8"></script> 
     <script type="text/javascript" src="js/table.js" charset="utf-8"></script> 
    </head> 
    <body> 
     <header> 
      <h1></h1> 
     </header> 
     <form name="myForm" method="GET" action=""> 
      <select id="cdLDAP" > 
       <option/> 
      </select> 
      <input type="button" id="btn_run" name="btn_run" value="Run"></input> 
     </form> 
     <table id="results_table"> 
      <thead> 
       <tr> 
        <th></th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td></td> 
       </tr> 
       <tr> 
        <td></td> 
       </tr> 
      </tbody> 
     </table> 
    </body> 
</html> 

のPerl(CGI):

#!/usr/bin/perl -T 
    use CGI; 
    use DBI; 
    use strict; 
    use warnings; 

    # read the CGI params 
    my $cgi = CGI->new; 
    my $inputselection = $cgi->param("cdLDAP"); 
    my $html_table = $cgi->param("html_table_results"); 
    my ($base_dn, $tblname); 
    #my $password = $cgi->param("password"); 

    #my $inputselection = "Disabled Users"; 
    #LDAP Connection parameters 
    if ($inputselection eq "Disabled Users") { 
     $base_dn = ""; 
     $tblname = "disabled_user"; 
    } elsif ($inputselection eq "") { 
     $base_dn = ""; 
     $tblname = "service_account"; 
    } elsif ($inputselection eq "") { 
     $base_dn = ""; 
     $tblname = ""; 
    } else { 
     die; 
    } 

    # connect to the database 
    my ($platform,$database,$host,$port,$db_user,$pw) = ("mysql","results","localhost","3306","resultsuser","mysql123"); 
    my $dsn = "DBI:$platform:database=$database,host=$host,port=$port"; 
    my $connect = DBI->connect("DBI:mysql:database=$database;host=$host",$db_user,$pw,{RaiseError => 1}); 

    #query db to get results set for table output 
    my $query_results = "SELECT * FROM " . $tblname; 
    my $query_handle = ""; 
    $query_handle = $connect->prepare($query_results) or die $connect->errstr; 
    $query_handle->execute() or die $query_handle->errstr; 

    print header; 
    # HTML for the beginning of the table 
    # we are putting a border around the table for effect 
    print "<table border=\"1\" width=\"800\"> \n"; 

    # print your table column headers 
    print "<tr><td>User ID</td><td>Status</td><td>Last Password Reset</td><td>Reset Needed?</td></tr>\n"; 

    my (@data,$uid,$status,$pwlstset,$resetmsg); 

    # retrieve the values returned from executing your SQL statement 
    foreach (@data = $query_handle->fetchrow_array()) { 
    $uid = $data[0]; 
    $status = $data[1]; 
    $pwlstset = $data[2]; 
    $resetmsg = $data[3]; 

    # print your table rows 
    print "<tr><td>$uid</td><td>$status</td><td>$pwlstset</td><td>$resetmsg</td></tr>\n"; 

    } 

    # close your table 
    print "</table>\n"; 

    # exit the script 
    exit; 

JS/jQueryの/ AJAX:だからここ

$(function() { 
    $('#btn_run').click(function() { 
     var tblname = $('#cdLDAP').val(); 
     var html_table = $('#results_table').attr('id'); 
     $.ajax({ 
      type: "GET", 
      url: "/perl/cgitest.pl", // URL of the Perl script that queries LDPA and inputs to mySQL 
      data: "cdLDAP=" +tblname, 
      // script call was *not* successful 
      error: function() { 
       alert("ERROR!"); 
      }, // error 
      // script call was successful 
      // data contains the JSON values returned by the Perl script 
      success: function(data){ 
       alert("success!"); 
      } // success 
     }); // ajax 
     $.ajax({ 
      type: "GET", 
      url: "/perl/cgitest2.pl", // URL of the Perl script that retirves data from mySQL 
      data: "cdLDAP=" +tblname +",html_table_results=" +html_table, 
      // script call was *not* successful 
      error: function() { 
       alert("ERROR!"); 
      }, // error 
      // script call was successful 
      // data contains the JSON values returned by the Perl script 
      success: function(data){ 
       alert("success!"); 
      } // success 
     }); // ajax 
    }); 
}); 

は、私は必要なものですいくつかの助けを借りて: 1)私のPERLスクリプトはhtmlタグを書くべきですか?はいの場合、新しいHTMLファイルではなくindex.htmlに書き込むにはどうすればよいですか? 2)テーブル構造がjqueryファイルによって作成されている場合、私は魚を与える方法を教えようとしており、魚を与えていないので、良い教材が高く評価されます。

答えて

4

Should my PERL script be writing the html tags?

no such thing as PERLがあります。

あなたは(あなたがunobtrusive JavaScriptを使用しなければならないことに注意)、動的にページを更新するためのAjaxを使用する場合は、あなたが取ることができる2つの基本的なアプローチがあります。クリーンなデータ構造で

  1. サーバーが返すデータは(おそらくJSON)
  2. Serverは、私がa JSON moduleを通してそれを実行し、あなたはPerlでハッシュリファレンスの配列を構築することになる場合には(前者のアプローチを支持して、一般的だと、その後のou HTML

の断片を返しますContent-Type HTTPヘッダーapplication/jsonでそれを出力します。

Internet Explorerの一部のバージョンでは、テーブル要素のinnerHTMLを編集しようとすると問題が発生するため、最初のオプションが改善されます。

If yes, how do I write to index.html and not a new html file?

ファイルには何も書き込まれません。 STDOUT経由でデータを返すと、Webサーバーはそれをクライアントに返します。

If the table structure is created by the jquery file, a good teaching source would eb appreciated

http://api.jquery.com/category/manipulation/

+0

私は、JSONと慣れていないですが、この作品はなりますか、私はまだそれをエンコードする必要がありますか?'my%json_hash =(); のforeach(@data = $ query_handle-> fetchrow_array()) \t { \t%はjson_hash =( \t \t \t \t "キー" => "ユーザID"、 \t \t \t \t "ヴァル" => $データ[0]、 \t \t \t \t "キー" => "ステータス"、 \t \t \t \t "ヴァル" => $データ[1]、 \t \t \t \t "キー" => "最後のパスワードリセット"、 \t \t \t \t "ヴァル" => $データ[2]、 \t \t \t \t "キー" => "必要なリセット"、 \t \t \t \t「ヴァル"=> $データ[3] \t \t \t \t) \t}' 、これは全体のハッシュまたは指定されたエントリのためだけのものを作成していして全滅取得し続けますか?また、 'encode'ドキュメンテーションから、これをハッシュとして作成することで、' encode'正しい仮定を使う必要はありませんか? – cquadrini

+0

JSONを脇に置いておくと、Perlのデータ構造としては機能しません。私はキー名として「キー」と「バリュー」を使用している理由を理解していません。確かに、同じキーを1回のハッシュで複数回使用することはできません。ループを何もしなくても(たとえば、配列への参照を追加するなど)、ループをたどるたびに '%json_hash'を上書きします。 JSONに関しては、Perlのデータ構造をJSON(または別の文字列ベースのシリアライゼーション)に変換してから、それをワイヤーに送る必要があります。 – Quentin

+0

https://github.com/dorward/simple-ajax-demo/blob/master/webroot/demo.plが役立つかもしれません。 – Quentin

関連する問題