我已经写了这个用户名检查的ajax请求......
function check_username() {
var username = $("#username").val();
$('.loading').fadeIn().delay(100);
$.post("ajax.php", {
username: $('#username').val(),
}, function (response) {
$('.error, .success').hide();
setTimeout(function () {
$('.loading').hide();
finishAjax('username', response);
}, 1000);
});
return false;
}
function finishAjax(id, response) {
$('#' + id).after(response).fadeIn(1000);
}
这一切都可以解决几个问题,
这段代码能否以任何方式得到改进,这是我写的第一篇,所以我不知道。
有没有办法让这个函数成为我所有的ajax请求,而不仅仅是用户名检查,所以它也可以用于电子邮件检查等等。我不确定如何创建这样的函数我是否必须在附加到我的表单的onblur事件上传递变量,在它看起来像这样。
有没有办法阻止ajax运行如果前面有相同的错误,即字符串长度应该超过3,所以有人输入AJ,错误信息'必须超过3个字符'然后,用户再次使用AJ或CG的值触发onblur事件,然后出现相同的错误,触发无用且使用内存的脚本。
有没有办法用用户输入的每个字符发出ajax请求?
我的ajax php如下......
<?php
require('dbc.php');
if (isset($_REQUEST['username'])) {
$q = $dbc -> prepare("SELECT username FROM accounts WHERE username = ?");
$q -> execute(array($_REQUEST['username']));
if (strlen($_REQUEST['username']) < 3) {
echo '<div class="error">Has to be at least 3 characters</div>';
}
elseif ($q -> rowCount() > 0) {
echo '<div class="error">Username already taken</div>';
}
else {
echo '<div class="success">Username available</div>';
}
}
?>
答案 0 :(得分:1)
回答1&amp;我会把它变成一个插件并按照这些方式做点什么。
$.fn.checkValid = function(options)
{
var response = function(response) {
var setClass = '';
var $span = $(this).data('checkValidTip');
if ($span)
{
$span.remove();
}
if (response === undefined) return;
setClass = (response.valid ? 'valid' : 'invalid');
var $span = $('<span>' + response.msg + '</span>');
$(this)
.data('checkValidTip', $span)
.after($span);
$span.hide()
.fadeIn(1000)[0]
.className = setClass;
};
var ajaxOptions = {
type: 'GET',
url: 'ajax.php',
success: response,
dataType: 'json'
};
this.each(function() {
var that = this;
var ajaxRequest = ajaxOptions;
ajaxRequest.data = {};
ajaxRequest.data[options.key] = this.value;
ajaxRequest.context = that
$.ajax(ajaxRequest);
});
};
$('#username, #email').blur(function() {
$(this).checkValid({ key: this.id });
});
你应该让你的PHP函数返回一个JSON,而不是HTML,即
<?php
// Do your sql statements here, decide if input is valid or not
$arr = array('valid' => $is_valid,
'msg' => $error_or_good_msg
);
echo json_encode($arr);
/* For example will output:
{
"valid": "false",
"msg": "<b>Error: Must be at least 2 characters</b>"
}
Which can be read directly as response.valid
or response.msg from within response() function
*/
回答问题3:简答回答是否定的。为此,您应该在JS中进行基本验证。最好的选择是使用一个使用对象作为验证参数的插件,这样您就可以使用json_encode
从PHP内部动态地输出验证要求,即输出格式为:
var validations = {
username: {
min_chars: 4,
max_chars: 10,
valid_chars: 'qwertyuiopasdfghjklzxcvbnm_-'
},
email: {
regex: /./ //your magic regex here
}
};
要回答4,只需将上述事件从.blur
更改为.keyup
即可。