Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AJAX 403被禁止,只是有时候_Php_Jquery_Ajax - Fatal编程技术网

Php AJAX 403被禁止,只是有时候

Php AJAX 403被禁止,只是有时候,php,jquery,ajax,Php,Jquery,Ajax,从本质上说,我试图检查用户名是否被使用,当用户键入时,它会触发ajax,在keyup上检查用户名是否被使用,如果是,它会突出显示红色输入。在GoogleChrome中,我打开了错误控制台,有时我收到403,有时没有收到 我注意到403当我开始太快地点击删除或输入用户名时,其他时候不管我做什么,它都会发生,更进一步,有时根本不会。文件权限正常,路径正确(我认为)。非常感谢您的帮助 代码如下: $(document).ready(function() { $("#username").key

从本质上说,我试图检查用户名是否被使用,当用户键入时,它会触发ajax,在keyup上检查用户名是否被使用,如果是,它会突出显示红色输入。在GoogleChrome中,我打开了错误控制台,有时我收到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;
                }
            }
        });
    });
});

请在超时的情况下尝试,也许你在短时间内有很多请求

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()
非常好,谢谢两位!我一定会在以后的代码中使用它。再次感谢!