1

我觉得一些简单的事情有点麻烦。我有一个 Perl 脚本,其中已经包含了一堆正常运行的 JQuery。当用户离开电子邮件地址字段时,我希望立即使用 .blur 和 .get 在 Perl 中运行电子邮件验证子程序。但是,我似乎无法将 Perl 脚本和 JQuery 调用连接在一起。所以我已经尽可能地简化了,只是为了让它发挥作用。基本上,用户离开输入字段,调用脚本,简单地打印一些东西,我通过警报让 Jquery。

jQuery

$('#billemail').blur(function() {
    $.get('ajax_email_check.pl', { 'email': $('#billemail').val() }, function(data) {
        alert ("Billing email is "+data+"!");
    });
});

Perl

#!/usr/bin/perl

use warnings;
use DBI;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
require "./lib/servervars.pl";
require "./lib/common.pl";

my $email_address = param('email');

#my $email_valid = &check_email($email_address);

#if ($email_valid) {
#    $output = "Success";
#} 
#else {
#    $output = "Fail";
#}

print "Success";

当然,如果我删除 .get 行和结束标记,则会在字段失去焦点时触发警报。谢谢您的帮助!

4

2 回答 2

4

您的 Perl 脚本(至少是您发布的版本)不输出内容类型标头。这是 CGI 脚本必须输出的最起码:响应标头、指示标头结束的空行以及可选的内容(success在您的情况下为字符串),例如

print "Content-Type: text/plain\n\n";
if (email_is_valid()) {
  print "success";
} else {
  print "error";
}
于 2013-04-12T17:18:17.767 回答
1

你为什么要逃离$这里?

$.get('ajax_email_check.pl', { 'email': \$('#billemail').val() }

                                       ^^^^^

至少这可能会阻止您从billemail元素中获取价值(输入?)。

更重要的是,您的引号不匹配,因此您的 JS 大体上是无效的:

alert ("Billing email is '+data+'!");   // <-- Need double-quotes
                        ^^^    ^^^

尝试修复它,看看你是否能得到更好的结果。

于 2013-04-12T16:44:21.057 回答