perl cgi を呼び出してグリッドを設定する jqgrid があります。cgi は DBD::Oracle を使用してデータを取得します。グリッドにデータが表示されていません。
スクリプトをデバッグすると、ステートメントの準備時に競合が発生することがわかりました。準備をスキップしてデータを送信するだけで問題なく動作します。Oracle から PostgreSQL に変更すると、問題なく動作します。
誰もこれを経験したことがありますか?CGI を対話的に実行すると実行され、画面に出力されるため、CGI が Oracle 接続で動作していることはわかっています。CGI がグリッドから呼び出された場合、そうではありません。Pg接続と準備でCGIが呼び出されると、データがグリッドにロードされます-完璧です
CG:
#!/usr/bin/perl
use CGI;
use DBI;
use Connect::Oracle;
use Connect::PG;
$stat = new CGI("");
print $stat->header;
$count = $stat->url_param('count');
#connecting to either db works fine
my $ORdbh = DBI->connect(Oracle->User, {PrintError=>1,RaiseError=>1});
# my $ORdbh = DBI->connect(PG->User, {PrintError=>1,RaiseError=>0});
$select = qq/select * from db.table/;
# preparing with Oracle connection works fine, but nothing returned to grid.
# Not even the hardcoded $rows below!
# Preparing with PG connection works also but $rows returns to grid
my $select_batch_status = $ORdbh->prepare($select);
#$select_batch_status->execute();
#$select_batch_status->bind_columns(\$COLLECTID, \$SYSTEM);
....removed fetch()....irrelevant
#The JSON is fine
$rows = qq/["COLLECTID","SYSTEM"]/;
$data = qq/{"page":"1","total": 1, "records": "$row_count", "rows": [/;
$data .= $rows;
$data .= qq/]}/;
print "$data";
exit;
jqgrid と DBD::Oracle の間に競合があると結論付けていますが、それ以下をデバッグする方法はありません。グリッドは Pg でうまく機能しますが、私は Oracle を使用したいと考えています。Chrome 開発者ツールでは、警告やエラーは表示されず、cgi はデータを送信していません
グリッド:
<script type="text/javascript">
var counter=0;
jQuery(function () {
jQuery("#list3").jqGrid({
url:'./collect.cgi?count=' + counter,
datatype: "json",
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
colNames: ['COLLECT ID', 'SYSTEM'],
colModel: [
{name: 'collectid', index: 'collectid', width: 100},
{name: 'system', index: 'system', width: 50},
],
rowNum: 20,
rowList: [15, 30, 45],
pager: '#pager3',
sortname: 'system',
sortable: true,
loadonce: true,
viewrecords: true,
sortorder: "asc",
rowTotal: 500,
jsonReader: {
cell: "",
id: "0"
},
gridview: true,
loadComplete: function() {
$(document).ready(function() {
setTimeout (function() {
counter++;
$("#list3").jqGrid().setGridParam({
url: './collect.cgi?count=' + counter,
datatype: 'json',
loadonce: true
}).trigger("reloadGrid",[{current:true}]);
}, 10000);
});
},
loadError: function(xhr,st,err) {
$("#jsonmapMessage").html("Type: " + st + "; Response: " + xhr.status + " " + xhr.statusText);
},
loadtext: "updating...",
caption: "COLLECTION MONITOR CONTROL",
width: 'auto',
height: '500'
});
$("#list3").jqGrid('navGrid','#pager3',{edit:true,add:true,del:true,refresh:true});
});
</script>