从jquery调用Ajax后,php $ POST []为空

时间:2016-09-28 19:55:48

标签: javascript php jquery html ajax

表格:

<form method="post" id="loginForm">
    <div class="form-group">
        <label for="email-signin">Email address:</label>
        <input type="email" class="form-control" id="email-signin" name="email-signin">
    </div>
    <div class="form-group">
        <label for="pwd-signin">Password:</label>
        <input type="password" class="form-control" id="pwd-signin" name="pwd-signin">
    </div>
    <div class="checkbox">
        <label>
            <input type="checkbox"> Remember me</label>
    </div>
    <button type="submit" class="btn btn-default" id="signIn" name="signIn">Sign In</button>
    <div id="error">
        <!-- error will be shown here ! -->
    </div>
</form>

jquery:

$("#signIn").on("click", function(e) {

   e.preventDefault();

    var values = $("#loginForm").serialize();

    console.log( values );

    $.ajax({
        type: "POST",
        url: "../php/BusinessLayer/User.php",
        data: values,
        beforeSend: function() { $("#error").fadeOut() },
        success :  function(response)
        {
            console.log("Success");
            if(response=="ok"){

            }
            else{
                $("#error").fadeIn(1000, function(){
                    $("#error").html('<div class="alert alert-danger"> <span class="glyphicon glyphicon-info-sign"></span> &nbsp; '+response+' !</div>');
                });
            }
        }
});

PHP:

<?php

 session_start();

include ("../DataLayer/VO/UserVO.php");
include ("../DataLayer/DAO/UserDAO.php");

// Database Execution for User Related Request
$userDAO = new UserDAO();

print_r($_POST);

if(isset($_POST['signIn']))
{
  echo 'test2';

  $user = new UserVO();

  $user->setEmail(trim($_POST['email-signin']));
  $user->setPassword(trim($_POST['pwd-signin']));

  // Request signin
  $userDAO->signIn($user);
}

使用此代码,我的php文件中的if(isset($_REQUEST['signIn']))永远不会返回true。我尝试了很多东西,似乎没什么用。

PS:我正在使用Jquery 1.12.4

另外,我的print_r($ _ POST);返回一个空数组。

1 个答案:

答案 0 :(得分:1)

jQuery的serialize函数不对按钮的值进行编码。取自here

注意:此答案最初由slashingweapon

发布
  

jQuery的serialize()非常明确地表示NOT编码按钮或提交输入,因为它们不被认为是“成功的控件”。这是因为serialize()方法无法知道单击了哪个按钮(如果有的话!)。

     

我设法通过点击按钮,序列化表单,然后将点击的按钮的编码名称和值添加到结果来解决问题。

$("button.positive").click(function (evt) {
    evt.preventDefault();

    var button = $(evt.target);                 
    var result = button.parents('form').serialize() 
        + '&' 
        + encodeURIComponent(button.attr('name'))
        + '='
        + encodeURIComponent(button.attr('value'))
    ;

    console.log(result);
});

就PHP侧的var转储是空的,尝试使用jQuery的.click而不是.on事件。

$('#signIn').click(function(){});

此外,从表单中删除该方法。看起来表单可能会在您单击按钮后立即提交。另外,删除

e.preventDefault();

并放置

return false;

点击功能的非常结束。 return false做3件事

  1. e.preventDefault()
  2. e.stopPropigation();
  3. return immdediatly