如果脚本调用成功,那么对它的响应进行测试。如果响应变量 data 没有包含错误消息,那么用户 id 和成功消息都将显示,用户 id 是通过 Perl 脚本从 users 表取回的。如果成功,代码样例将隐藏起来,并只显示 div 标记。
完整的 JavaScript 代码清单 3. login.js$(document).ready(function(){ $("form#loginForm").submit(function() { // loginForm is submitted var username = $('#username').attr('value'); // get username var password = $('#password').attr('value'); // get password if (username && password) { // values are not empty $.ajax({ type: "GET", url: "/cgi-bin/login.pl", // URL of the Perl script contentType: "application/json; charset=utf-8", dataType: "json", // send username and password as parameters to the Perl script data: "username=" + username + "&password=" + password, // script call was *not* successful error: function(XMLHttpRequest, textStatus, errorThrown) { $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText + ", textStatus: " + textStatus + ", errorThrown: " + errorThrown); $('div#loginResult').addClass("error"); }, // error // script call was successful // data contains the JSON values returned by the Perl script success: function(data){ if (data.error) { // script returned error $('div#loginResult').text("data.error: " + data.error); $('div#loginResult').addClass("error"); } // if else { // login was successful $('form#loginForm').hide(); $('div#loginResult').text("data.success: " + data.success + ", data.userid: " + data.userid); $('div#loginResult').addClass("success"); } //else } // success }); // ajax } // if else { $('div#loginResult').text("enter username and password"); $('div#loginResult').addClass("error"); } // else $('div#loginResult').fadeIn(); return false; }); });
Perl对于一个非常简单的实现,Perl 只需要三个模块;CGI、DBI 和 DBD::mysql。通过使用 CGI 模块,Perl 脚本获取 Ajax 发送的 username 和 password 值。然后脚本连接到数据库,发出查询并对给定的值选取用户 id。根据查询结果,JSON 响应将由一个错误消息或一个成功消息和用户 id 构建。Perl 脚本将内容类型设置为 application/json 并使用 JSON 字符串响应 Ajax,字符串由 jQuery 在 data 变量中获取。
完整的 Perl 代码清单 4. login.pl#!/usr/bin/perl -T use CGI; use DBI; use strict; use warnings; # read the CGI params my $cgi = CGI->new; my $username = $cgi->param("username"); my $password = $cgi->param("password"); # connect to the database my $dbh = DBI->connect("DBI:mysql:database=mydb;host=localhost;port=2009", "mydbusername", "mydbpassword") or die $DBI::errstr; # check the username and password in the database my $statement = qq{SELECT id FROM users WHERE username=? and password=?}; my $sth = $dbh->prepare($statement) or die $dbh->errstr; $sth->execute($username, $password) or die $sth->errstr; my ($userID) = $sth->fetchrow_array; # create a JSON string according to the database result my $json = ($userID) ? qq{{"success" : "login is successful", "userid" : "$userID"}} : qq{{"error" : "username or password is wrong"}}; # return JSON string print $cgi->header(-type => "application/json", -charset => "utf-8"); print $json;
代码验证要构建有效的 JSON 响应,可能需要使用一个 JSON 验证器。
参见 ,了解有关 JSON 验证的更多消息。
显示生成的 JSON 字符串
可以在您的浏览器中检查 JSON 字符串:
注意