0

javascript パラメーター "Step" は、php の switch-case 関数をトリガーする必要があります。Step が 1 つである場合、php でこのコードをトリガーし、JSON で出力を返します。

firebug を見ると、投稿文字列は次のとおりStep=one&inputFname=rick&inputLname=bovenkampです。これは正しいと思います。したがって、問題はphpファイルにある必要があり、その部分にあると思います$_POST...

私は何を間違っていますか?どんな助けでも非常に素晴らしいでしょう!

JavaScript コード:

$(document).ready(function() {
    $("form#userForm").submit(function() {
        var inputFname = $('#inputFname').attr('value');
        var inputLname = $('#inputLname').attr('value');
            var Step = "one";
        $.ajax({
            type: "POST",
            url: "main.php",
            data: {Step: Step,inputFname: inputFname,inputLname: inputLname},
            dataType: "json",
            contentType:"application/json; charset=utf-8",
                success: function(data) {
                $("p.succesText").html(data.jsCode);
                    $("form#userForm").hide();
                $("div.success").fadeIn();
            },
            error: function(xhr, status, error) {
                $("form#userForm").hide();
                $("p.errorHead").html("Something went wrong.");
                $("p.errorText").text("ResponseText: " + xhr.responseText
                                        + "Statuscode: " + xhr.status
                                        + "ReadyState: " + xhr.readyState);
                $("div.error").fadeIn();
            }
        });
            return false;
    });
});     

PHP ファイル:

<?php header('content-type: application/json; charset=utf-8');

    $log = array();

    $varStep = htmlspecialchars(trim($_POST["Step"]));  

    switch($varStep) {

        case "one":

        $varFname = htmlspecialchars($_POST["inputFname"]);
        $varLname = htmlspecialchars($_POST["inputLname"]);

        //Make Database connection
        $db = mysql_connect("192.168.178.254","root","852456");
        if(!$db) die("Error connecting to MySQL database.");
        mysql_select_db("Ajax" ,$db);

        //Generate code and check if code already exists in the database
        do
        {
            $varCode = rand(10000, 99999);
            $dbCheckCode = "";
            $dbCheckCode = mysql_query("SELECT * FROM TableAjax WHERE code='$varCode'");
        }
        while (mysql_fetch_array($dbCheckCode) !== false);

        //Save the Form data in the database
        $sql = "INSERT INTO TableAjax (fname, lname, code) VALUES (".PrepSQL($varFname) . ", " .PrepSQL($varLname) . ", " .PrepSQL($varCode) . ")";
        mysql_query($sql);  

        //Return code to frontend
        $log['jsCode'] = $varCode;

        break;
    }

    echo json_encode($log);


    //Clean SQL statement
    function PrepSQL($value)
    {
        if(get_magic_quotes_gpc()) 
        {
            $value = stripslashes($value);
        }
        $value = "'" . mysql_real_escape_string($value) . "'";
        return($value);
    }   

?>
4

1 に答える 1

1

Step を引用符で囲みますdata : {"Step" : Step,...

その場合、変数の値をキーとして渡しています。つまり、実際に を渡していdata : {"one" : "one",...ます。と で同じことを行う必要がinputLnameありinputFnameます。

編集 - 説明

ここhttp://api.jquery.com/jQuery.ajax/で contentType オプションが何をするかを見ると、デフォルトがあなたが望むものであることがわかりapplication/x-www-form-urlencodedます。基本的に、PHP エラーが示していたのは$_POST、形式が原因でデータを読み取る方法がわからなかったため、配列が空だったことです。戻りデータを にしたい場合、必要なjsonのはオプションだけでした。dataType

投稿の最初の部分で指摘したことを行う必要はありましたが、基本的には 2 つのエラーがあり、つまずきました。

これが理にかなっていることを願っています!

于 2012-05-10T15:36:55.367 に答える