基本上我正在尝试检查用户名是否被占用,因为用户键入它会触发ajax并在keyup检查是否被采用,如果它是突出显示输入红色。在谷歌浏览器中,我打开了错误控制台,有时我收到了403,有时则没有。
当我开始点击删除或输入用户名太快时,我注意到403,有时无论我做什么都会发生,而且有时甚至根本没有。文件权限正常,路径正确(我认为)。任何帮助都非常感谢。
以下是代码:
$(document).ready(function()
{
$("#username").keyup(function()
{
$.ajax({
url: '/resources/ajax/userCallbacks.php',
type: 'post',
data: 'checkName='+$(this).val(),
success: function(response){
// Check response
switch(response)
{
case 'taken':
$("#username").addClass('red-border');
break;
case 'available':
$("#username").removeClass('red-border');
break;
}
}
});
});
});
答案 0 :(得分:0)
请暂停尝试,也许你需要在短时间内提出许多请求......
var mytimeout = false;
$(document).ready(function()
{
$("#username").keyup(function()
{
if(mytimeout != false) {
window.clearTimeout(mytimeout);
}
mytimeout = window.setTimeout("doAjaxRequest()",500);
});
});
function doAjaxRequest() {
$.ajax({
url: '/resources/ajax/userCallbacks.php',
type: 'post',
data: 'checkName='+$("#username").val(),
success: function(response){
// Check response
switch(response)
{
case 'taken':
$("#username").addClass('red-border');
break;
case 'available':
$("#username").removeClass('red-border');
break;
}
}
});
}
答案 1 :(得分:0)
这是我一直使用的代码段,可以防止同时触发太多请求。
这个想法是你在a.ajax中存储ajax调用的状态。一旦请求新呼叫,前一个呼叫将立即被取消,从而防止网络服务器过载。
$(document).ready(function()
{
$("#username").keyup(function()
{
if( this.ajax )
{
this.ajax.abort();
}
this.ajax = $.ajax({
url: '/resources/ajax/userCallbacks.php',
type: 'post',
data: 'checkName='+$(this).val(),
success: function(response){
// Check response
switch(response)
{
case 'taken':
$("#username").addClass('red-border');
break;
case 'available':
$("#username").removeClass('red-border');
break;
}
}
});
});
});