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ファイルによって作成されている場合、私は魚を与える方法を教えようとしており、魚を与えていないので、良い教材が高く評価されます。
私は、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
JSONを脇に置いておくと、Perlのデータ構造としては機能しません。私はキー名として「キー」と「バリュー」を使用している理由を理解していません。確かに、同じキーを1回のハッシュで複数回使用することはできません。ループを何もしなくても(たとえば、配列への参照を追加するなど)、ループをたどるたびに '%json_hash'を上書きします。 JSONに関しては、Perlのデータ構造をJSON(または別の文字列ベースのシリアライゼーション)に変換してから、それをワイヤーに送る必要があります。 – Quentin
https://github.com/dorward/simple-ajax-demo/blob/master/webroot/demo.plが役立つかもしれません。 – Quentin