Javascript未在开发服务器上填充Perl表单
Javascript not populating Perl Form on Dev Server
我还是Perl的新手,遇到过一些困难。
我在这里有一个系统,它需要为用户分配权限,以便他们运行报告。
该系统在机器上托管的本地测试环境中完全可以运行,但一旦它被上传到Windows Server 2008 for dev,它似乎就不再填充分配的报告表单了。
我们使用Javascript函数来填充用户下拉列表,并填充可用的报告。当涉及到已分配的报告时,不再填充任何内容。从保管处提取的完全相同的代码将在本地环境中工作,不会出现任何问题。
只有当我们将Perl脚本的目录更改为指向本地机器环境,而不是指向服务器上的Perl脚本时,分配的报告才会填充。
这是它指向服务器目录:
function ReadUserPermission( iUserID )
{
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
var szURL;
var iPermNumber = 0;
szURL = "/Scripts/Security/ReadPermissions.pl";
xmlhttp.Open("POST", szURL, false);
xmlhttp.Send( iUserID );
var bRetVal = PermissionTab.loadXML( xmlhttp.responseText );
var rt = xmlhttp.responseText;
RGCollection = PermissionTab.XMLDocument.selectNodes("//REPORTGROUP");
for (var i=0; i< RGCollection.length; i++)
{
RGXML = new ActiveXObject("Msxml2.DOMDocument")
RGXML.loadXML( RGCollection.item(i).xml );
ReportCollection = RGXML.selectNodes( "//REPORTGROUPNAME" );
szReportGroupName = ReportCollection.item(0).text;
ReportCollection = RGXML.selectNodes( "//REPORTGROUPID" );
iReportGroupID = ReportCollection.item(0).text;
ReportCollection = RGXML.selectNodes( "//REPORT" );
for( var j=0; j < ReportCollection.length; j++ )
{
IR = new ActiveXObject( "MSXML2.DOMDocument" );
IR.loadXML( ReportCollection.item(j).xml );
IRD = IR.selectNodes( "//REPORTNAME" ); szReportName = IRD.item(0).text;
IRD = IR.selectNodes( "//REPORTID" ); iReportID = IRD.item(0).text;
IRD = IR.selectNodes( "//PERMISSION" ); bPermission = IRD.item(0).text;
Users[iUserID].Permissions[iPermNumber] = new DataClass;
Users[iUserID].Permissions[iPermNumber].ReportGroupName = szReportGroupName;
Users[iUserID].Permissions[iPermNumber].ReportGroupID = iReportGroupID;
Users[iUserID].Permissions[iPermNumber].ReportName = szReportName;
Users[iUserID].Permissions[iPermNumber].ReportID = iReportID;
Users[iUserID].Permissions[iPermNumber].Permission = bPermission;
iPermNumber++;
}
}
}
但是当szURL="//028-07743/Scripts/Security/ReadPermissions.pl"时,它运行时没有问题。
有人能为我提供任何帮助吗?
这是ReadPermissions.pl脚本,我们认为它没有运行。
use CGI qw/:standard *table start_ul :cgi-lib/;
use Win32::ODBC;
require "ServerDetails.cfg";
#Reads Details for Connection from CFG file
sub ReadCfg
{
my $file = $_[0];
our $err;
{ # Put config data into a separate namespace
package CFG;
# Process the contents of the config file
my $rc = do($file);
# Check for errors
if ($@) {
$::err = "ERROR: Failure compiling '$file' - $@";
} elsif (! defined($rc)) {
$::err = "ERROR: Failure reading '$file' - $!";
} elsif (! $rc) {
$::err = "ERROR: Failure processing '$file'";
}
}
return ($err);
}
# Get our configuration information
if (my $err = ReadCfg('ServerDetails.cfg')) {
print(STDERR $err, "'n");
exit(1);
}
$szDataSource = "DSN=$CFG::CFG{'server'}{'DSN'};UID=$CFG::CFG{'server'}{'UID'};PWD=$CFG::CFG{'server'}{'PWD'}";
%PARM = Vars;
$iUser = $PARM{'keywords'};
open TMP, ">dhtml.txt";
$db = OpenConnection( $szDataSource );
$szSQLStatement = "EXEC spGetUserPermissionTabData '$iUser'";
$iNumRecordsRead = ReadData( -dbconnection=>$db, -sqlstatement=>$szSQLStatement, -datahash=>'%UserData );
$szXMLString = "<Permissions>'n";
$szCurrentReportGroupName = "";
foreach $KEY ( sort{ $a <=> $b } keys %UserData )
{
if( $szCurrentReportGroupName ne $UserData{$KEY}{AppGroupName} )
{
if( $szCurrentReportGroupName ne "" ) #Close any previous report groups
{
$szXMLString .= "'t</REPORTGROUP>'n";
}
$szXMLString .= "'t<REPORTGROUP>'n" .
"'t't<REPORTGROUPNAME>$UserData{$KEY}{AppGroupName}</REPORTGROUPNAME>'n" .
"'t't<REPORTGROUPID>$UserData{$KEY}{ApplicationGroupID}</REPORTGROUPID>'n";
$szCurrentReportGroupName = $UserData{$KEY}{AppGroupName};
}
$szXMLString .= "'t<REPORT>'n" .
"'t't<REPORTNAME>$UserData{$KEY}{AppDisplayName}</REPORTNAME>'n" .
"'t't<REPORTID>$UserData{$KEY}{ApplicationID}</REPORTID>'n" .
"'t't<PERMISSION>$UserData{$KEY}{PermissionType}</PERMISSION>'n" .
"'t</REPORT>'n";
}
$szXMLString .= "'t</REPORTGROUP>'n" .
"</Permissions>";
print TMP "UserID = $szUser'n";
print TMP "XML = $szXMLString'n";
print TMP "Size of XML = " . length( $szXMLString ) . "'n";
close $TMP;
print "Content-Type: text/html'n'n";
print "$szXMLString";
sub OpenConnection()
{
my( $szDSN ) = @_;
my $db = new Win32::ODBC( $szDSN );
if( !defined $db )
{
my $szLocalTime = localtime();
$szHTMLString = header;
$szHTMLString .= "Error creating ODBC connection'n";
$szHTMLString .= "<BR>Time: $szLocalTime'n";
$szHTMLString .= end_html();
print $szHTMLString;
return NULL;
}
return $db;
}
sub ReadData()
{
my ( %fnArgs ) = @_;
my $szSQLStatement = $fnArgs{-sqlstatement};
my $cDBConnection = $fnArgs{-dbconnection};
local( *DataHash ) = $fnArgs{-datahash};
my $iRowID = 0;
if ($cDBConnection->Sql($szSQLStatement))
{
print "SQL failed. Error: " . $cDBConnection->Error() . "'n";
$cDBConnection->Close();
exit;
}
while($cDBConnection->FetchRow())
{
$DataHash{$iRowID++} = {$cDBConnection->DataHash()};
}
return $iRowID;
}
sub XMLizer
{
local ( *DataHash ) = @_;
my $szXMLString = "";
foreach $KEY ( keys %DataHash )
{
$szXMLString .= "'t<" . $KEY . ">" . $DataHash{$KEY} . "</" . $KEY . ">'n";
}
return $szXMLString;
}
现在看来,如果我们将Perl文件中的SQL语句更改为$szSQLStatement = "EXEC spGetUserPermissionTabData 464";
,它将用特定的用户报告填充指定的窗口,即使该用户没有选择(预期)。我们现在认为,Perl文件可能没有接收到Javascript发送给它的iUserID
Javascript是一种客户端脚本语言,不会在服务器上运行。
Node.js应该更有帮助:http://en.wikipedia.org/wiki/Node.js
相关文章:
- 如何设置html元素填充的动画
- 如何使用jquery在填充自动完成的值后使文本框只读
- 如何通过ajax刷新JSF填充的javascript变量
- 用与线条相同的颜色填充多折线图上的点
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 用我的json数据填充JQuery DataTable
- 使用 jQuery 检查所有值是否为空或已填充
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 如何让typeahead在我的搜索栏中填充自定义参数
- PERL-下载CSV文件不完整
- 如何使用JSON字符串中的jQuery填充下拉框
- 动态填充两个下拉菜单
- 如何将CSS(特别是填充/边距)应用于select下拉菜单的选项或optgroup
- spine.js在启动时填充模型实例
- 如何将要单独填充的每个HTML画布路径/形状分开
- CSS赢得't填充视图端口
- 从JSON填充列表(而不是HTML)
- Fabric.js-更改矩形填充
- Javascript未在开发服务器上填充Perl表单