我在login.php
有检查用户是否存在的代码,还有一个 AJAX 调用,我有一个按钮标签的形式;如果我使用 PHP type='submit'
但 AJAX 不工作;如果我使用type='button'
AJAX 可以工作,但 PHP 不起作用。
我也尝试过输入,但它是一样的:
<?php
if (isset($_POST['enviar'])) {
include "php/conexion.php";
try {
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = 'SELECT count(user_name) FROM user WHERE user_name=:usuario AND password=:password';
$query = $conexion->prepare($sql);
$query->bindParam(":usuario", $user);
$query->bindParam(":password", $pass);
$query->execute();
if($res = $query->fetch())
{
header("refresh:0.1;url=main.php");
}else{
echo"User or Password incorrect";
}
} catch (Exception $ex) {
$a= $ex->getMessage();
var_dump($a);
die();
}
}
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">
function realizaProceso(user,pass){
$.ajax({
data: {"user" : user, "pass": pass},
url: 'php/functions_sql.php',
type: 'post',
success: function(output) {
}
});
}
</script>
<div class="container">
<div class="login-container">
</div>
<div class="form-box">
<form action="login.php" method="post">
<input name="user" id="user" type="text" placeholder="User">
<input type="password" name="pass" id="pass" placeholder="Password">
<button class="btn btn-info btn-block login" type="button" id="enviar" name="enviar" onclick="realizaProceso($('#user').val(),$('#pass').val());" >Login</button>
</form>
</div>
</div>
</div>
</div>
您需要阻止表单提交,以允许执行 AJAX 调用。对代码进行以下更改:
onclick="realizaProceso($('#user').val(),$('#pass').val()); return false;"
return false;
语句告诉 HTML 表单"停止"表单提交的执行,以允许您改为执行自定义操作,例如 AJAX 表单提交。这就是为什么您的表单在使用时似乎失败的原因type='submit'
您的 AJAX 调用似乎也在调用"php/functions_sql.php"。您确定要 AJAX 调用看似(基于其标题)包含 SQL 相关方法的帮助程序类吗?
我担心您发布到"functions_sql.php",这可能不是为了读取这些变量而设计的。
if (isset($_POST['enviar'])) { ... }
中的所有内容似乎都是登录脚本(并读取变量)。您似乎将"异步"(AJAX)和"非异步"用法混合在一起,这就是您感到困惑的原因。
将该代码移动到单独的文件中(例如,login_auth.php),然后更改 AJAX 调用以专门与其通信($.ajax({ ... , url: 'login_auth.php'}
PHP 检查$_POST['enviar']
,但 AJAX 调用没有将其放在data:
选项中。用:
$.ajax({
data: { user: user, pass: pass, enviar: 1 },
url: 'php/functions_sql.php',
type: 'post',
success: function(output) {
}
});
而不是button
,使用<input type='button' ....
它必须是一个输入字段才能跨浏览器正常工作