AJAX 403 Forbidden,有时候

时间:2013-05-31 04:57:55

标签: php jquery ajax

基本上我正在尝试检查用户名是否被占用,因为用户键入它会触发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;
                }
            }
        });
    });
});

2 个答案:

答案 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;
                }
            }
        });
    });
});