Я попытался сделать простой возврат mysql на той же странице после ввода идентификатора в поле html.Как читать данные json в perl, отправленные через ajax/jquery?
Я отправил его через ajax в perl-скрипт, который должен выполнить поиск в базе данных и получить результат имени.
Я искал в Интернете пробовал разные варианты, но я не мог найти правильный ответ за то, что я ищу.
Я пытаюсь получить номер 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;
Если я даю cidID значение внутри Perl сценарий и удалить все определение главы для json, я получаю правильный результат для cidID.
Но проблема в том, чтобы получить правильные данные в cidID из ajax.
UPDATE
Я новичок здесь, так что я не знаю, если удалить часть выше, или оставить его для других, чтобы узнать ..
however- я сделал второй взгляд на веб и сделал некоторые изменения в код, как в ПРИМЕР-
в AJAX я изменил метод из «POST» в «GET»
сейчас он работает, я не знаю, почему он не работает с POST , есть идеи?
, но когда я хочу отобразить результат в DIV, он мгновенно вспыхивает и не остается там.
и есть ли способ вернуть результат в переменной для дальнейшего использования в jquery? i попытался -
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;
Действительно, 'use strict' является * существенным *. Единственная причина, по которой она не включена по умолчанию, заключается в том, чтобы не нарушать огромное количество устаревшего кода: она обязательна для чего-либо нового. – Borodin
благодарит за вас быстрый и подробный ответ, я сделал обновление вопроса, спасибо за любую дальнейшую помощь! – Michael
+1 для параметризованных операторов SQL. – dgw