Php AJAX 403被禁止,只是有时候
从本质上说,我试图检查用户名是否被使用,当用户键入时,它会触发ajax,在keyup上检查用户名是否被使用,如果是,它会突出显示红色输入。在GoogleChrome中,我打开了错误控制台,有时我收到403,有时没有收到 我注意到403当我开始太快地点击删除或输入用户名时,其他时候不管我做什么,它都会发生,更进一步,有时根本不会。文件权限正常,路径正确(我认为)。非常感谢您的帮助 代码如下:Php AJAX 403被禁止,只是有时候,php,jquery,ajax,Php,Jquery,Ajax,从本质上说,我试图检查用户名是否被使用,当用户键入时,它会触发ajax,在keyup上检查用户名是否被使用,如果是,它会突出显示红色输入。在GoogleChrome中,我打开了错误控制台,有时我收到403,有时没有收到 我注意到403当我开始太快地点击删除或输入用户名时,其他时候不管我做什么,它都会发生,更进一步,有时根本不会。文件权限正常,路径正确(我认为)。非常感谢您的帮助 代码如下: $(document).ready(function() { $("#username").key
$(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;
}
}
});
});
});
请在超时的情况下尝试,也许你在短时间内有很多请求
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;
}
}
});
}
这是我一直在使用的代码片段,它可以防止同时触发太多的请求 其思想是将ajax调用的状态存储在this.ajax中。一旦请求了新的调用,前一个调用将立即取消,从而防止Web服务器过载
$(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;
}
}
});
});
});
您应该使用
setTimeout
函数延迟ajax调用,保留超时的引用。当在超时结束之前触发第二个事件时,您只需取消超时(使用clearTimeout)
并重新创建它。这将允许您仅在用户停止编写一点时运行AJAX调用,这样您就不会有请求泛滥问题。查看节流和去抖动,您正在杀死您可怜的服务器(不确定$(this).val()
是否会返回值,因为您的上下文不正确..您必须使用$(“#用户名”).val()
非常好,谢谢两位!我一定会在以后的代码中使用它。再次感谢!