表格:
<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> '+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);返回一个空数组。
答案 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件事