0

MySQL、Perl、および JS を使用して、Web サイトの簡単な登録フォームを作成しようとしています。Perl スクリプトは、コマンドラインまたは URL を介して直接パラメーターを指定すると正常に動作し、MySQL はユーザーを適切に登録します。問題は 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';

Perl スクリプトがデータを受け入れる方法ではなく、JS がデータを送信する方法を変更する必要があるのではないかと思います。いずれにせよ、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;
    });
});

問題に関連しない限り、フォームから送信された情報をほとんどチェックしていないという事実を無視してください. さらに情報が必要な場合はお知らせください。よろしくお願いします。

4

2 に答える 2

2

JSONをサーバーに送信していないため、使用contentType: "application/json; charset=utf-8",するとデフォルトが上書きされます'application/x-www-form-urlencoded; charset=UTF-8'

デフォルトを使用すると、サーバー スクリプトは、他のフォーム送信の場合と同様に、キーと値のペアを処理します。

于 2012-10-21T19:17:33.560 に答える
0

CGI ドキュメントによると:

POST されたデータのタイプが application/x-www-form-urlencoded または multipart/form-data でない場合、POST されたデータは処理されず、代わりに POSTDATA という名前のパラメーターでそのまま返されます。

そのため、コンテンツ タイプの指定を削除し、jQuery がそのデフォルトを使用できるようにしますapplication/x-www-form-urlencoded。(multipart/form-dataファイルのアップロードを含むフォーム データに使用されます。)

于 2012-10-21T19:47:43.900 に答える