2013-10-05 68 views
0

我有一個相當簡單的登錄處理程序爲我的網站,我遇到了麻煩,用戶填入用戶名和密碼到適當的輸入,ajax發送信息到perl腳本,檢查,並返回一條消息關於它是否成功,以及這個信息是否被放入一個div中。現在,當我使用XMLHttpRequest.responseText獲取錯誤消息時,ajax返回「undefined」。根本沒有消息結果發送。狀態,用戶名和密碼正常工作。問題與JQuery AJAX Perl

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;  
} 
+0

'味精'包含什麼?把console.log(msg)代替$('#result')。html(msg.result);並告訴你看到了什麼。它是空的嗎? – lukaleli

+0

味精,應包含「登錄成功」或「登錄失敗」。我改變了你的建議,沒有任何改變。 – Kizzim

+0

我最初打印的是一個散列給JSON,關鍵是「結果」,這是剩餘的。 – Kizzim

回答

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 ... 

安裝螢火蟲或任何瀏覽器使用的是這樣你就可以確保您的JSON是成功返回AJAX調用時類似的東西。

檢查你的錯誤日誌,找出你使用的任何服務器,看看你的perl後端是否在拋出錯誤。

+0

在相關說明中,CGI.pm相對年齡較大。有幾種perl替代方案可以用於開發包括許多框架在內的現代Web開發。這是[概述](http://modernperl.net/developers/web-application-development.html) – mikew