javascript - 不明白成功函数在 AJAX 中的工作原理
问题描述
这个问题在这里被问了很多,但是在我花了将近一半的时间之后,我无法解决我的问题。
我在用户个人资料中有此表格,用户可以在其中更改密码。我用 JS 验证表单并将其发送到 PHP 进行处理。但是,在 PHP 脚本结束时,我检查它是否成功连接到数据库并完成该过程,在这种情况下我回显 1。我想在 JS 中通知用户,但它的工作方式相反。我的意思是当结果 == 0
HTML
<form id="passwordChangeForm">
<input type="hidden" id="uid" name="uid" class="form-control" value="<?= ($user_detail['id']) ? $user_detail['id'] : '' ?>">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="password1">Password</label><br>
<input type="password" name="password" id="password1">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="password1">Password Repeat</label><br>
<input type="password" name="passwordr" id="passwordr">
</div>
</div>
<button type="submit" id="pwd-change-btn" onclick = "pwdChange()">Submit</button><br><br>
<p id="pwd-change-error"></p>
</div>
</form>
JavaScript
function pwdChange(){
var pwd1 = $('#password1').val();
var pwdr = $('#passwordr').val();
var uid = $('#uid').val();
var form = $('#passwordChangeForm');
$('#pwd-change-error').empty();
if(pwd1.length < 8 || pwdr.length < 8){
form.submit(function(e){
e.preventDefault();
});
$("#pwd-change-error").append('<div class="alert alert-danger"><button class="close" data-close="alert"></button>Passwrod must be at least 8 characters</div>').delay(3000).fadeOut(3000);
} else if(pwd1 !== pwdr){
form.submit(function(e){
e.preventDefault();
});
$("#pwd-change-error").append('<div class="alert alert-danger"><button class="close" data-close="alert"></button>Passwrods doesn\'t match</div>');
} else{
var updatePwd = '';
$.ajax({
url: "update.php",
type: "POST",
data:{
pwd1: pwd1,
uid: uid,
updatePwd: updatePwd,
},
sucess: function(){
if (result == '1') {
window.location = "index.php";
} else {
$("#pwd-change-error").append('<div class="alert alert-danger"><button class="close" data-close="alert"></button>Error accoured</div>');
}
}
});
}
}
PHP
<?php
session_start();
require_once "db_connect.php";
if (isset($_POST['updatePwd'])) {
$pwd = $_POST['pwd1'];
$uid = $_POST['uid'];
$sql = "UPDATE users SET password = ? WHERE id = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo "Something went wrong :(";
exit();
} else {
$newPwdHash = password_hash($pwd, PASSWORD_DEFAULT);
mysqli_stmt_bind_param($stmt, "ss", $newPwdHash, $uid);
mysqli_stmt_execute($stmt);
$query = mysqli_query($conn, $sql);
}
if ($query == 1) {
echo '1';
} else {
echo '0';
}
}
解决方案
JSON参数未设置,成功响应无标识
你应该这样做:
data:{ // data is not a valid JSON
"pwd1": pwd1,
"uid": uid,
"updatePwd": updatePwd,
}
对于重定向:
success : function(result){
if (result == '1') {
window.location.href = "index.php";
} else {
$("#pwd-change-error").append('<div class="alert alert-danger"><button class="close" data-close="alert"></button>Error accoured</div>');
}
}
推荐阅读
- python - 张量流预测
- python - 如何通过 pandas 列从嵌套的三元组 for 循环中输出完整的结果表?
- sql - 在 MS SQL 约束中创建唯一检查 + 附加检查
- css - SASS - CSS - 动画在 chrome 中工作,而不是在 Firefox 中
- postgresql - JPQL 得到列和现在之间的天数差异
- java - setStroke() 和 setFill() 产生不同的像素颜色
- docker - 如何在单个 docker 容器中传递运行 Prisma 服务器的环境变量
- java - ContentValues 与 SQLiteStatement
- scons - 如何通过从命令行调用其父 SConstruct 来指定要在 SConscript 文件中定义的目标库?
- java - @Inject 在 java EE 中给出 NullPointer 异常