簡體   English   中英

Perl CGI->Vars() 沒有正確散列 cgi 參數

[英]Perl CGI->Vars() not properly hashing cgi parameters

我正在嘗試使用 MySQL、Perl 和 JS 為我的網站制作一個簡單的注冊表單。 當直接通過 cmdline 或通過 URL 給定參數並且 MySQL 正確注冊用戶時,Perl 腳本工作正常。 問題出在 JS 上; 當我通過 JSON 帖子發送數據時,Perl 腳本接收帖子並嘗試創建通過代碼給出的參數的散列:

%params = $cgh->Vars()

但是,這不能正確拆分參數並將它們分配給各個鍵。 相反,Perl 腳本會創建一個如下所示的散列:

%params 數據

$VAR1 = 'POSTDATA';
$VAR2 = 'action=register&uname=d&pass=d&first=d&last=d&email=anemail@themailplace.com&phone=d';

我懷疑 JS 需要改變它提交數據的方式,而不是 Perl 腳本接受數據的方式。 無論如何,這是JS:

$(document).ready(function(){
    $("form#register-form").submit(function() { // register-form is submitted
        var username = $('#username').attr('value'); // get username
        var password = $('#password').attr('value'); // get password
        var repassword = $('#repassword').attr('value'); // get password
        var firstName = $('#firstName').attr('value'); // get password
        var lastName = $('#lastName').attr('value'); // get password
        var email = $('#email').attr('value'); // get password
        var phone = $('#phone').attr('value'); // get password

        if (username && password && repassword && firstName && lastName && email && phone) { // values are not empty
            $.ajax({
                type: "POST",
                url: "/cgi/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: "action=register" + "&uname=" + username + "&pass=" + password + "&first=" + firstName + "&last=" + lastName
                    + "&email=" + email + "&phone=" + phone,
                // script call was *not* successful
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    $('div#register-result').text("responseText: " + XMLHttpRequest.responseText
                        + ", textStatus: " + textStatus
                        + ", errorThrown: " + errorThrown);
                    $('div#register-result').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#register-result').text("data.error: " + data.error);
                        $('div#register-result').addClass("error");
                        } // if
                    else { // login was successful
                        $('form#register-form').hide();
//                        $('div#register-result').text("data.success: " + data.success + ", data.userid: " + data.userid);
//                        $('div#register-result').addClass("success");
                    } //else
                } // success
            }); // ajax
        } // if
        else {
            $('div#register-result').text("enter username and password");
            $('div#register-result').addClass("error");
        } // else
//    $('div#register-result').fadeIn();
    return false;
    });
});

除非與問題相關,否則請忽略我幾乎不檢查表單提交的信息這一事實。 如果您需要更多信息,請告訴我。 先謝謝了。

您沒有將 JSON 發送到服務器,因此使用contentType: "application/json; charset=utf-8",將超過默認的'application/x-www-form-urlencoded; charset=UTF-8' 'application/x-www-form-urlencoded; charset=UTF-8'

使用默認值,服務器腳本像處理任何其他表單提交一樣處理鍵/值對

根據 CGI 文檔:

如果 POSTed 數據不是 application/x-www-form-urlencoded 或 multipart/form-data 類型,則不會處理 POSTed 數據,而是在名為 POSTDATA 的參數中按原樣返回。

所以刪除你的內容類型規范並允許 jQuery 使用它的默認application/x-www-form-urlencoded multipart/form-data用於包含文件上傳的表單數據。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM