代码之家  ›  专栏  ›  技术社区  ›  somdow

Ajax未提交到PHP

  •  0
  • somdow  · 技术社区  · 7 年前

    我遇到了一个Ajax没有提交到PHP处理表单的问题。当我直接从表单提交到PHP文件时,它做了它应该做的事情,并且工作得很好,但是当我尝试通过ajax提交时(我不希望在处理时加载任何内容),它总是对我的所有变量等说“未定义索引”。

    这是一个基本的形式,所以不知道我做错了什么。你需要换一双眼睛看这个。我尝试过不同的发布方法,我尝试过在JS上添加/删除数据类型和数据等。有趣的是,我确实将PHP上的错误消息反馈给了“#formStatusMessage”,因此它是从后向前通信,但不是从前向后发送数据。

    为了便于阅读,我删去了所有无关紧要的代码。非常感谢您的帮助。

    HTML格式:

    <form id="mainUserRegFormActual" method="post" >
                <input type="text" id="uFname" name="uFname" placeholder="first name" value="ozarks">
                <input type="text" id="uLname" name="uLname" placeholder="last name" value="sucks Balls">
                <input type="text" id="uEmail" name="uEmail" placeholder="email" value="neverWatchingAgain@ever.com">
                <input type="submit">
            </form>
        </div>
    

    $("#mainUserRegFormActual").on("submit", function(evt){
        evt.preventDefault();
    
        var formProcURL = "proc.php";
        var dataStringForStream = $("#mainUserRegFormActual").serialize();
    
        $.ajax({
            url : formProcURL,
            type: "POST",
            contentType: "application/json",
            dataType: 'json',
            data: dataStringForStream,
        }).done(function(dataPassResponse){
            $("#formStatusMssgs").text("passed data send --> " + dataPassResponse);
        }).fail(function(dataFailResponse){
            $("#formStatusMssgs").text("failed data send --> " + dataFailResponse.responseText);
        });
    });
    

    菲律宾比索:

    define('DB_NAME', 'testDB');
    
    /** MySQL database username */
    define('DB_USER', 'unameHere');
    
    /** MySQL database password */
    define('DB_PASSWORD', 'passHere');
    
    /** MySQL hostname */
    define('DB_HOST', 'localhost');
    $c2d = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die("Failed to connect to database" . mysqli_error($c2d));
    
    // =============================================== ][ user info from form ]
    $uFnameClean=mysqli_real_escape_string($c2d, $_POST["uFname"]);
    $uLnameClean=mysqli_real_escape_string($c2d, $_POST["uLname"]);
    $uEmailClean=mysqli_real_escape_string($c2d, $_POST["uEmail"]);
    
    // =============================================== ][ db query ]
    $insertData = "INSERT INTO testDB (first_name, last_name, email_addy) VALUES ('$uFnameClean', '$uLnameClean', '$uEmailClean')";
    
    // =============================================== ][ validation ]
    if(empty($uFnameClean) || empty($uLnameClean) || empty($uEmailClean)){
        http_response_code(400);
        $userMessage = "Sorry, there was an error processing your form because you forgot to enter in either your First Name, Last Name, or your Email Address. " ;
    
        echo $userMessage;
        die();
    
    } elseif(!filter_var($uEmailClean, FILTER_VALIDATE_EMAIL)){
        http_response_code(400);
        $userMessage = "Sorry, there was an error processing your form because the email you entered is incorrect. " ;
    
        echo $userMessage;
        die();
    
    } elseif(preg_match('#[0-9]#',$uFnameClean) || preg_match('#[0-9]#',$uLnameClean)) {
        echo "Unfortunately there was a problem saving your data. Your name has numbers";
        die();
    
    } else {
    
        if($c2d){
            if(mysqli_query($c2d, $insertData)){
                http_response_code(200);
                setcookie("userRegistered", true);
                echo "Your data has been saved!";
            }else{
                http_response_code(400);
                echo "Unfortunately there was a problem saving your data. Please try again later";
            }
    
        }else{
            http_response_code(400);
            echo "no connection";
        }
    
    }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Musa    7 年前

    您的ajax请求中的内容类型是错误的,您将其作为 application/json

    $.ajax({
        url : formProcURL,
        type: "POST",
        //dataType: 'json',
        data: dataStringForStream,
    }).done(function(dataPassResponse){
        $("#formStatusMssgs").text("passed data send --> " + dataPassResponse);
    }).fail(function(dataFailResponse){
        $("#formStatusMssgs").text("failed data send --> " + dataFailResponse.responseText);
    });
    

    $.ajax的默认内容类型是 application/x-www-form-urlencoded 这就是你从中得到的 .serialize() 以及用来填充 $_POST


    dataType: 'json', 也应该移除。

        2
  •  2
  •   Justin T.    7 年前

    我相信问题可能出在 您正在使用发送数据。当我使用 在您提供的表单数据中,我得到以下输出:

    uFname=ozarks&uLname=糟透了%20Balls&uEmail=neverWatchingAgain%40ever.com

    此数据未格式化为JSON。如果你移除 参数,您的数据应正确发送。

    推荐文章