AJAX 提交表单数据失败。当我关闭 e.preventdefault 时它可以使用 $_GET

AJAX submit form data fails. It works using $_GET when i turn off e.preventdefault

这是我第一次 post 来这里。对不起,如果我的英语看起来不好。

我试图使用以下代码向我的 signup/submit/index.php.

提交表单数据

这是我的样本HTML

    <form name="signup_form" id="signup_form" action="submit">
     <input type="text" class="form-control" placeholder="CreateUsername" name="username" id="username" autocomplete="off">
<input type="password" class="form-control"  placeholder="CreatePassword" name="password" id="password"></form>

这是我的 Ajax

 .on('success.form.fv', function(e) {

        e.preventDefault();


        loadshow();

         var $form = $(e.target),
            fv    = $form.data('formValidation');

        // Use Ajax 
        $.ajax({
            url: $form.attr('action'),
            type: 'POST',
            data: $('#signup_form').serialize(), //or $form.serialize()
            success: function(result) {
                // ... Process the result ...
                //alert(result);
                if (result=="2")
                {
                swal({
                  type: "success",  
                  title: "HiHi!",
                  text: "GoodLuck",
                  animation: "slide-from-top",
                  showConfirmButton: true
                  }, function(){   

                    var username = $("#username").val();
                    var password = $("#password").val();
                    functionA(username,password).done(functionB);

                });



                }
                else (result=="agent_na")
                {
                swal({
                  type: "error",    
                  title: "ERROR",
                  text: "N/A",
                  animation: "slide-from-top",
                  showConfirmButton: true
                });

这是我的 PhP

<?php
  $params = array();
$gett = $_POST["username"];
parse_str($gett,$params);

print_r ($gett); // it prints an empty array
print_r ($gett); // it prints an empty array
echo $params["username"]  // it shows undefined username index
?>

我试图在 parse_str 之前序列化 $gett。它returns我(){}[].

可以帮我解决这个问题吗??我为此花了将近 20 个小时,google 并尝试了很多。我是 JS 新手。

我尽量保持简单

HTML

<!-- Include Jquery Plugin -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="signup_form">
   <input type="text" name="username"  placeholder="Enter the user name" />
   <input type="password" name="password"    placeholder="Enter password here" />
   <input type="submit" value="Login" />
</form>
<script>
    /* Page loaded */
    $(function(){
        /* Trigger when the form submitted */
        $("#signup_form").submit(function(e) {          
            var form = $(this);         
            $.ajax({
                type: "POST",
                url: "backend.php",
                data: form.serialize(), // Checkout the document - https://api.jquery.com/serialize/
                success: function(data) {
                    // handle the return data from server
                    console.log(data);
                }
            });
            e.preventDefault();
            return false;
        })
    })
</script>

PHP (backend.php)

<?php
    // Always check param exists before accessing it
    if(isset($_POST['username']) && isset($_POST['password'])){
        // Print all the post params
        print_r($_POST);
        // or by param
        // echo "User Name: " . $_POST['username']. " <br />";
        // echo "Password: " . $_POST['username']. " <br />";
    }
?>

希望对您有所帮助!

这是一个如何调试 ajax 调用的示例:

Javascript:

$(function(){
    $("#signup_form").submit(function(e) {          
        var formData = new FormData($(this));         
        $.ajax({
            type: "POST",
            url: "backend.php",
            data: formData,
            success: function(data) {
                console.log(data);
                // if (data.length > 0) ....
            }
        });
        e.preventDefault();
        return false;
    });
});

PHP:

<?php
if (isset($_POST['signup_form'])){
    $params = array();
    $gett   = $_POST['username'];
    parse_str($gett,$params);

    print_r ($gett);
    echo $_POST['username'];
}else{
    die('No $_POST data.');
}
?>

你的 php 代码有一些问题,你错过了一个分号,你试图从一个空数组打印,通过 ajax 调用不会显示任何 运行 时间错误,因此在尝试调试 ajax 到 php 调用时需要非常小心。

希望对您有所帮助。