我在html字段中输入id之后尝试在同一页面上做一个简单的mysql返回。
我通过ajax将它发送到perl脚本,该脚本应该在DataBase中进行搜索并获得名称的结果。
我在网上搜索尝试了不同的选项,但我无法找到正确的答案。
我想获取一个ID号码将其发送到数据库并获取此ID联系人的姓名。
这是我的HTML代码:
<!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>
<script language="javascript" type="text/javascript">
var xmlHttp = new XMLHttpRequest();
</script>
<META charset="utf-8">
<TITLE>Ajax-tool</TITLE>
</head>
<body>
<form id="procform" name="procform" method="POST" action="">
<b>Contact ID:</b>
<fieldset>
<input type="text" id="CID" name="CID" size="20" />
<p><input type="submit"></p>
</fieldset>
</form>
<p></p>
<div id="content"></div>
<SCRIPT type="text/javascript" src="/js/jquery.js"></SCRIPT>
<SCRIPT type="text/javascript" src="js/jquery-ui.min.js"></SCRIPT>
<SCRIPT type="text/javascript" src="/js/ajax01.js"></SCRIPT>
</body>
</HTML>
jQuery脚本:
$(document).ready(function() {
$("form#procform").submit(function() {
var id = $("#CID").val();
var jsondata = { 'CID' : id };
$.ajax({
type: "POST",
url: "http://192.168.10.1/cgi-bin/ajax01.pl",
async: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {CID: id},
success: function(result) {
$("div#content").text("data.success: " + data);
//alert(data);
},
error: function (request, status, error) {
alert(request.responseText);
}
});
//alert( + id + "");
});
});
和perl脚本:
#!/usr/bin/perl -T
use CGI ":all";
use DBI;
#use strict;
use warnings;
use Encode;
use JSON;
use Storable;
#$foo = CGI->new;
#$foo->charset('utf-8');
$json = JSON->new->allow_nonref;
$dbh = DBI->connect('mylogin)
|| die "Could not connect to database: $DBI::errstr";
#my $cidID = CGI->new->param( 'CID' );
my $cidID = $json->decode('CID');
#my $cidID = $foo->param('CID');
#$cidID = 44;
######### select contact name from contacts ##############
$sth0 = $dbh->prepare("SELECT * FROM contacts WHERE cid= $cidID")or "can't prepare : $DBI::errstr\n";
$sth0->execute()or die "Can't execute: $DBI::errstr\n";
@row0 = $sth0->fetchrow_array;
my $VCName3 = $row0[1];
$sth0->finish();
print $VCName3;
my $json1 = $json->encode($VCName3);
print $foo->header(-type => "application/json", -charset => "utf-8");
print $json1;
如果我在perl脚本中给cidID一个值并删除json头部的整个定义,我得到了cidID的正确结果。
但问题是从ajax获取正确的数据到cidID。
更新
我是新来的,所以我不知道是否要删除上面的部分或留给别人学习..
然而 - 我再次浏览网页并对代码进行了一些更改,例如 -
在ajax中我将方法从“POST”更改为“GET”
现在它正在工作,我不知道为什么它不适用于POST,任何想法?
但是当我想在DIV中显示结果时,它只会闪烁一会儿而不会停留在那里。
并且有什么方法可以将结果返回到变量中以便在jquery中进一步使用? 我试过 -
var result = $(data.userid);
没有任何成功。
以下是他们工作方式的代码 -
HTML
<!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>
<script language="javascript" type="text/javascript">
var xmlHttp = new XMLHttpRequest();
</script>
<META charset="utf-8">
<TITLE>Ajax-tool</TITLE>
</head>
<body>
<form id="procform" name="procform" method="POST" action="">
<b>Contact ID:</b>
<fieldset>
<input type="text" id="CID" name="CID" size="20" />
<p><input type="submit"></p>
</fieldset>
<p></p>
<div id="content"></div>
</form>
<SCRIPT type="text/javascript" src="http://192.168.10.1/js/jquery.js"></SCRIPT>
<SCRIPT type="text/javascript" src="http://192.168.10.1/js/jquery-ui.min.js"></SCRIPT>
<SCRIPT type="text/javascript" src="http://192.168.10.1/js/ajax01.js"></SCRIPT>
</body>
</HTML>
JQUERY
$(document).ready(function() {
$("form#procform").submit(function() {
var id = $("#CID").val();
var jsondata = { 'CID' : id };
$.ajax({
type: "GET",
url: "http:/cgi-bin/ajax01_1.pl",
async: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "CID=" + id,
success: function(data) {
$("div#content").append("Name: " + data.userid);
//alert("Name: " + data.userid);
},
error: function (request, status, error) {
alert(request.responseText);
}
});
});
});
PERL
use DBI;
use strict;
use warnings;
use Encode;
my $foo = CGI->new;
my $cidID = $foo->param("CID");
my $dbh = DBI->connect('here goes my login passw ect..')
|| die "Could not connect to database: $DBI::errstr";
my @row0;
######### select contact name from contacts ##############
my $sth0 = $dbh->prepare("SELECT * FROM contacts WHERE cid= ?")or "can't prepare : $DBI::errstr\n";
$sth0->execute($cidID)or die "Can't execute: $DBI::errstr\n";
@row0 = $sth0->fetchrow_array;
my $VCName3 = $row0[1];
$sth0->finish();
print $VCName3;
my $json1 = ($VCName3)?
qq{{"success" : "login is successful", "userid" : "$VCName3"}} :
qq{{"error" : "username or password is wrong"}};;
print $foo->header(-type => "application/json", -charset => "utf-8");
print $json1;
答案 0 :(得分:6)
你的Perl脚本充满了怪异。我会建议修复这些奇怪的事情,然后再想知道是否存在实际问题。
use strict
。认真。这将指出许多错误来源。它会强制您声明变量(使用my
)。这是件好事。$foo = CGI->new
,因为您实际上稍后使用该对象。但为此,变量确实应该用对象初始化。此外,将其重命名为合理的,并声明变量:my $cgi = CGI->new;
。 → monumental CGI docs 'mylogin
。die
时:如果你死了,那么你的日志中会出现错误信息。该程序将产生更多错误,因此您应该累积相当多的条目。也许看看他们,并解决问题!此外,您可能希望在开发期间向浏览器发送错误。使用use CGI::Carp qw/fatalsToBrowser/;
执行此操作。 → CGI::Carp documentation decode
而非decode_json
是您真正想要的(decode_json
假定为UTF-8)。两种方法都需要JSON字符串。 Perl字符串my $not_json = q/CID/
是不是有效的JSON。那将是my $json = q/"CID"/
。看报价?my $sth = $dbh->prepare('SELECT * FROM contacts WHERE cid = ?') or die ...
,然后将实际变量作为参数$sth->execute($cidID) or die ...
执行。$sth->fetchrow_array
只提取一行,但您选择了所有行。修复SQL,以便只选择第一行,或遍历所有行! while (my @row = $sth->fetchrow_array){ do something @row }
。 → DBI docs print $VCName3
!这可能会产生许多500
错误。不要那样做。UTF-8
发送。也许您应该使用encode_json
。[在这里插入关于十条诫命的笑话]
修复这些问题后,问题可能会也可能不会存在。如果是,请更新您的问题并删除您这样做的评论。然后,我们将了解如何解决这些实际的问题。