Php 什么';创建AJAX用户名验证处理程序的最佳方法是什么?
我正在开发一个社交网站,并对前端进行改进 我正在实现的改进之一是聊天名称的AJAX验证程序。设置如下: 访问者进入注册页面,并在字段中键入所需的聊天名称。输入时,用户会得到即时反馈,询问该聊天名称是否已被使用、是否包含非法字符、长度是否错误等 我已经实现了这一点:我已经设置了一个简单的PHP脚本作为AJAX处理程序,它绑定到输入的Php 什么';创建AJAX用户名验证处理程序的最佳方法是什么?,php,ajax,Php,Ajax,我正在开发一个社交网站,并对前端进行改进 我正在实现的改进之一是聊天名称的AJAX验证程序。设置如下: 访问者进入注册页面,并在字段中键入所需的聊天名称。输入时,用户会得到即时反馈,询问该聊天名称是否已被使用、是否包含非法字符、长度是否错误等 我已经实现了这一点:我已经设置了一个简单的PHP脚本作为AJAX处理程序,它绑定到输入的onkeyup和blur事件。但是,每个请求都涉及一个数据库查询,这不太好 我的问题是:我怎样才能简化这个过程?当然,对每个onkeyup或blur进行数据库查询不是一
onkeyup
和blur
事件。但是,每个请求都涉及一个数据库查询,这不太好
我的问题是:我怎样才能简化这个过程?当然,对每个onkeyup
或blur
进行数据库查询不是一个好主意吗?我推荐以下(基于时间的)策略:
var timeout = null;
var stopTimeout = function () {
// step 2: stop running timeout
if (timeout !== null) {
clearTimeout(timeout);
timeout = null;
}
};
var doRequest = function () {
// step 4: do request
};
// step 1: event fires
$('input').keyup(function () {
stopTimeout();
// step 3: start new timeout
timeout = setTimeout(doRequest, 500);
}).blur(function () {
stopTimeout();
doRequest();
});
正如其他人所说,检查无效字符等应在客户端和服务器端进行,因为您不能信任客户端。我建议采用以下(基于时间的)策略:
var timeout = null;
var stopTimeout = function () {
// step 2: stop running timeout
if (timeout !== null) {
clearTimeout(timeout);
timeout = null;
}
};
var doRequest = function () {
// step 4: do request
};
// step 1: event fires
$('input').keyup(function () {
stopTimeout();
// step 3: start new timeout
timeout = setTimeout(doRequest, 500);
}).blur(function () {
stopTimeout();
doRequest();
});
正如其他人所说,检查无效字符等应该在客户端和服务器端进行,因为您不能信任客户端。检查有效用户名是唯一的方法,因为它需要进入您的数据库。我建议将检查无效字符的逻辑放入javascript中,然后只检查可用且有效的用户名onblur,这样,您只需在用户每次单击该字段时发出请求
当然,尽管将验证放在js中,但仍然应该在php中检查验证,检查有效用户名是唯一的方法,因为它需要进入数据库。我建议将检查无效字符的逻辑放入javascript中,然后只检查可用且有效的用户名onblur,这样,您只需在用户每次单击该字段时发出请求 当然,尽管将验证放在js中,您仍然应该在php中检查它所有验证(非法字符、长度等)都应该在客户端完成,并且在提交表单之前不需要运行服务器端 可以通过ajax实时检查用户名。除非你有一个非常慢的服务器或大量的用户,否则它应该是好的 从可用性的角度来看,我并不真正建议使用模糊,而是使用键控或让用户单击字段旁边的链接/按钮 用户不一定知道他们触发了模糊(特别是如果模糊是由于聚焦到另一个字段而发生的),因此如果ajax返回用户名错误,他们可能无法确定如何再次重复检查。而是让他们清楚地知道他们是如何触发ajax的。所有验证(非法字符、长度等)都应该在客户端完成,并且在提交表单之前不需要在服务器端运行 可以通过ajax实时检查用户名。除非你有一个非常慢的服务器或大量的用户,否则它应该是好的 从可用性的角度来看,我并不真正建议使用模糊,而是使用键控或让用户单击字段旁边的链接/按钮
用户不一定知道他们触发了模糊(特别是如果模糊是由于聚焦到另一个字段而发生的),因此如果ajax返回用户名错误,他们可能无法确定如何再次重复检查。而是让他们明白他们是如何触发ajax的。多亏了@elusive,我想出了以下解决方案:
jQuery.fn.inlineValidation = function() {
return this.each(function() {
var input = $(this);
var timeoutId = 0;
$(this).bind('keyup', function() {
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {
var value = input.val();
$.getJSON('/ajax/user_name.php', { 'user_name': value }, function(data) {
if (data.success === true) {
input.next('.form_feedback').removeClass('error').addClass('success').text(data.message);
} else {
input.next('.form_feedback').removeClass('success').addClass('error').text(data.message);
}
});
}, 1000);
});
});
};
多亏了@elousive,我想出了以下解决方案:
jQuery.fn.inlineValidation = function() {
return this.each(function() {
var input = $(this);
var timeoutId = 0;
$(this).bind('keyup', function() {
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {
var value = input.val();
$.getJSON('/ajax/user_name.php', { 'user_name': value }, function(data) {
if (data.success === true) {
input.next('.form_feedback').removeClass('error').addClass('success').text(data.message);
} else {
input.next('.form_feedback').removeClass('success').addClass('error').text(data.message);
}
});
}, 1000);
});
});
};
我的想法是,当他们离开这个领域时,应该进行最后一次用户名检查,告诉用户,“嘿,你留下的这个用户名是无效的。”此外,这是一个相当大的网站:它已经有100000名成员,并且正在增长。看看雅虎的注册情况。有一个“检查”按钮,你按下,它会进行检查,并返回基于用户名的可选选项。它不会模糊字段,但需要用户单击按钮。gmail注册也是如此。我的想法是,当他们离开这个领域时,应该进行最后的用户名检查,告诉用户,“嘿,你留下的这个用户名是无效的。”此外,这是一个相当大的网站:它已经有10万名会员,并且正在增长。看看yahoo注册。有一个“检查”按钮,你按下,它会进行检查,并返回基于用户名的可选选项。它不会模糊字段,但需要用户单击按钮。gmail注册也是这样。