所以我想在用户输入4个字符时运行ajax,而不是在用户点击/按下提交按钮时运行ajax,所以我必须删除这一行:
form.on('submit', function(e){
但在那种情况下,我会收到错误。我的代码:
$('#passwordField').keyup(function () {
if (this.value.length == 4) {
$(function(){
var form = $('#login-form');
if(form.is('.loading, .loggedIn')){
return false;
}
var user = form.find('#usernameField').val(),
messageHolder = form.find('#usernameErrorContainer');
var pass = form.find('#passwordField').val(),
messageHolder = form.find('#passErrorContainer');
e.preventDefault();
$.post(this.action, {user: user}, function(m){
if(m.error){
form.addClass('error');
messageHolder.text(m.message);
}
else{
form.removeClass('error').addClass('loggedIn');
messageHolder.text(m.message);
}
});
$.post(this.action, {pass: pass}, function(p){
if(m.error){
form.addClass('error');
messageHolder.text(p.message);
}
else{
form.removeClass('error').addClass('loggedIn');
messageHolder.text(p.message);
}
});
$(document).ajaxStart(function(){
form.addClass('loading');
});
$(document).ajaxComplete(function(){
form.removeClass('loading');
});
});
}
});
}
});
})
对于这个应用程序,我不需要任何安全措施,所以请不要让我阅读有关安全性的文章。
编辑:实际形式:
<form id="login-form" name="login-form" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" id="usernameField" name="username" maxlength="4" placeholder="username">
<input type="password" id="passwordField" maxlength="4" name="password" placeholder="password">
<span id="usernameErrorContainer"></span>
<span id="passErrorContainer"></span>
</form>
答案 0 :(得分:0)
问题是当您将SELECT *
FROM users
WHERE first_name LIKE '%Pat%'
FETCH FIRST 100 ROWS ONLY
更改为form.submit
时,您忘记更改其他元素。例如,
你的匿名函数中仍然有keyup
,因为e.preventDefault
不在函数内,所以会抛出错误,
修复它将e
置于匿名函数之外或删除它,因为它没有做任何事情。也
所有e.preventDefault
变量都假设您使用的是纯JS创建的变量,但实际上是使用jquery创建它,如下所示:form
你
需要将其更改为:var form = $('#login-form');