0

我的网站有一个非常简单的登录处理程序,但我遇到了问题,用户将用户名和密码填写到适当的输入中,ajax 将信息发送到检查的 perl 脚本,并返回一条关于它是否成功的消息和该消息被放置到一个div中。现在,当我使用 XMLHttpRequest.responseText 获取错误消息时,ajax 只会返回“未定义”。根本没有发送消息结果。状态、用户名和密码正常工作。

jQuery

<script>
function login() {
        var login = {
            status: "login",
            username: $('#username').val(),
            password: $('#password').val()
            };
            $.ajax({
                    type: 'POST',
                    url: 'bar.cgi',
                    dataType: "json",
                    data: login,
                     },
                    }).done(function( msg ) {
                                                $('#result').html( msg );
                                            });
        }
</script>

Perl bar.cgi

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use JSON;
use Template;

my $q = CGI->new;
my $dbh = DBI->connect( $db, $db_user, $db_pass ) or die("Connection Error: 
+DBI::errstr\n");

my $s = CGI::Session->new("driver:mysql;serializer:storable", $q, {'Handle'=> $dbh }) or 
+die( CGI::Session->errstr );   

if ($q->param('status') eq 'login') {

...check that username/password matches database if so modify session

print $s->header('application/json');
print to_json("login successful");
exit;    
}
4

1 回答 1

0

to_json 可能会失败,因为您没有将哈希传递给它,而只是传递了一个字符串。

$ perl -MJSON -e "print to_json({msg => 'login success'});"
{"msg":"login success"}

$ perl -MJSON -e "print to_json('success');"
hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at ...

为您使用的任何浏览器安装 firebug 或类似的东西,这样您就可以确保在进行 ajax 调用时您的 json 成功返回。

检查您使用的任何服务器的错误日志,以查看您的 perl 后端是否抛出错误。

于 2013-10-08T16:09:59.273 回答