Php 来自jQueryUI对话框的AJAX调用
我正在开发一个用户登录系统,使用jQueryUI模式对话框在html和PHP脚本之间进行交互。最近,我将所有的用户功能移到了一个PHP文件中,从我以前在标题标记中的位置开始 如果有人输入了有效的用户名/密码,我可以让登录功能正常工作,但现在我尝试考虑其他可能性,即有人输入了有效的用户名但密码不正确,或者他们输入了不存在的用户名 我遇到的问题是对话框脚本上的Php 来自jQueryUI对话框的AJAX调用,php,jquery,ajax,Php,Jquery,Ajax,我正在开发一个用户登录系统,使用jQueryUI模式对话框在html和PHP脚本之间进行交互。最近,我将所有的用户功能移到了一个PHP文件中,从我以前在标题标记中的位置开始 如果有人输入了有效的用户名/密码,我可以让登录功能正常工作,但现在我尝试考虑其他可能性,即有人输入了有效的用户名但密码不正确,或者他们输入了不存在的用户名 我遇到的问题是对话框脚本上的AJAX调用。我想将登录表单提交到同一个页面user.php,然后让用户登录,或者返回一条错误消息,在同一个对话框中填充一个div 现在,我的
AJAX
调用。我想将登录表单提交到同一个页面user.php,然后让用户登录,或者返回一条错误消息,在同一个对话框中填充一个div
现在,我的代码将返回一条错误消息,但它也会返回用户表单的副本。我真的不知道我做错了什么如有任何意见,将不胜感激 编辑:决定继续发布整个user.php,因为根据一个答案进行更改会使此文件添加的html完全消失。我现在猜我可能有几件事做错了:
<html>
<span id="user">
<ul>
<?php
//if user is logged in, show name and Log Out option, else show Log In and Sign Up options
if(isset($_COOKIE["user"])) {
setSessionUserData($_COOKIE["user"]);
echo "<li>Logged in as {$_SESSION["username"]}</li>";
echo "<li> | </li>";
echo "<li><a href='#' id='logout_link'>Log Out</a></li>";
} else {
echo "<li><a href='#' id='login_link'>Log In</a></li>";
echo "<li> | </li>";
echo "<li><a href='#'>Sign up</a></li>";
}
?>
</ul>
</span>
<div id="login_dialog" title="Existing User">
<form id="login_form">
<fieldset>
<label for="userid">Username</label>
<input type="text" name="username" id="username" />
<label for="pw">Password</label>
<input type="password" name="pw" id="pw" />
</fieldset>
</form>
<span class = "error"></span>
</div>
<div id="logout_dialog" title="Log Out">
<p><span class="ui-icon ui-icon-alert alert-icon"></span>Are you sure you want to log out?</p>
</div>
<script>
$(function() {
var username = $("#username"),
password = $("#pw"),
loginFields = $([]).add(username).add(password);
$("#login_link").click(function() {
$("#login_dialog").dialog("open");
});
$("#logout_link").click(function() {
$("#logout_dialog").dialog("open");
});
$("#login_dialog").dialog({
autoOpen: false,
height: 200,
width: 250,
resizeable: false,
modal: true,
buttons: {
Submit: function() {
$.post("auth.php",
{
username: $("#username").val(),
password: $("#pw").val()
},
function(result) {
if(result=='success'){
window.location='Practice.php';
}
else {
$(".error").html(result);
}
}
)
},
Cancel: function(){
$(this).dialog("close");
}
},
close: function() {
loginFields.val("");
}
});
$("#logout_dialog").dialog({
autoOpen: false,
modal: true,
height: 150,
resizeable: false,
buttons: {
Okay: function() {
window.location = "logout.php";
},
Cancel: function() {
$(this).dialog("close");
}
}
});
});
</script>
</html>
<?php
function setSessionUserData($cookie) {
$con = connect();
$query = "SELECT * FROM practice_user WHERE userid = '$cookie'";
$result = mysqli_query($con, $query);
$userData = mysqli_fetch_array($result);
$_SESSION["username"] = $userData["username"];
$_SESSION["fname"] = $userData["first_name"];
$_SESSION["lname"] = $userData["last_name"];
}
?>
}
我的代码中还有其他函数来处理验证等如果我需要发布这些,请让我知道 你能试试这个吗 您无法在调用php文件本身的ajax中重定向页面,因此重定向部分移到了javascript端 Jquery
$("#login_dialog").dialog({
autoOpen: false,
height: 200,
width: 250,
resizeable: false,
modal: true,
buttons: {
Submit: function() {
$.post("auth.php",
{
username: $("#username").val(),
password: $("#pw").val()
},
function(result) {
if(result=='success'){
window.location='Practice.php';
}else{
$(".error").html(result);
}
}
)
},
Cancel: function(){
$(this).dialog("close");
}
},
close: function() {
loginFields.val("");
}
});
创建名为auth.php的新页面,包括依赖项php函数
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
$user = test_input($_POST["username"]);
$pass = test_input($_POST["password"]);
//check if correct login
if (chkLogin($user, $pass)) {
$id = getUser($user, $pass);
setUserCookie($id);
echo "success";
}
//check if username exists but incorrect password entered
else if (chkUser($user)) {
echo "Username and password do not match";
}
//Or else return that username doesn't exist
else {
echo "Username does not exist";
}
}
?>
如果您根本不想执行重定向,并且您认为由于ajax响应被附加到$('.error')
容器中而导致错误
这可能对你有帮助
Submit: function() {
$.post("user.php",
{
username: $("#username").val(),
password: $("#pw").val()
},
function(result) {
if(result=='success'){
$("#login_dialog").append(result);
setTimeout(function(){
$("#login_dialog").dialog("close");
},800);
}else{
$('.error').html(result);
}
}
)
},
这会将结果附加到对话框中,并在多次尝试使Krish R的方法工作800毫秒后关闭对话框,方法是对单独php页面的代码进行AJAX调用,并在成功时通过window.location重定向,我发现在AJAX调用成功的过程中,window.location
本身不起作用。我最终发现了一个类似的问题,使用window.location.assign(data)
来代替,效果非常好
虽然我不明白为什么这个不同的方法是必要的,但它确实解决了重定向问题。感谢所有回应的人。我正在检查Krish R的答案是否被接受,因为它是最接近解决方案的答案。您所说的“返回用户表单副本”是什么意思?看起来这段PHP代码只是发出重定向或回显字符串。我没有看到任何其他潜在的产出。代码中是否有其他未显示的输出?我真的不清楚这里发生了什么。在你的php中,你在成功时进行重定向,为什么不直接返回成功并用javascript进行重定向呢?在这个特定的文件中有很多代码。我在这里发布的内容只涉及登录功能。其余的是验证功能和其他功能(注销、创建帐户等)的代码。我认为问题在于我如何在PHP中处理事情。我确实希望它在成功时重定向…我可能没有正确地使用AJAX…或者PHP。我真的不确定:/n这样做会产生相同的结果。修复了函数放置的一系列问题,现在错误消息可以正常工作,但cookie和重定向的设置不会发生。知道为什么吗?更正:设置cookie是有效的。现在一切正常,除了成功重定向。。。我现在正试图弄明白为什么这不起作用。function(result){console.log(result);
你能更新控制台日志中的结果值吗!控制台返回的所有结果都是未捕获引用错误:未定义标题
你使用了我的auth.php答案吗?不要在auth.php中使用标题
Submit: function() {
$.post("user.php",
{
username: $("#username").val(),
password: $("#pw").val()
},
function(result) {
if(result=='success'){
$("#login_dialog").append(result);
setTimeout(function(){
$("#login_dialog").dialog("close");
},800);
}else{
$('.error').html(result);
}
}
)
},