javascript - AJAX 请求成功 3 次,然后失败

标签 javascript php jquery ajax

我正在使用以下脚本将即时消息异步提交到我的数据库。

function sendMessage(content, thread_id, ghost_id)
{
    var url = "ajax_submit_message.php";
    var data = { content: content, thread_id: thread_id };
    var type= "POST"; 

    $.ajax({
        url:url,
        type:type,
        data:data,
        success:function(){ unGhost(ghost_id); refreshMessages(); },
        error:function(){alert("FAIL");}
     });
}

这在正常情况下完全符合预期,但是当我向我的 PHP 脚本添加一个“sleep(10)”以尝试找出它在服务器负载过重时如何运行时,我发现该脚本只能处理一个在它中止之前很少有请求。

脚本将完成三个成功的请求,但在第四个时每次都会失败。它不调用错误函数,而是调用成功函数。我不知道如何调试它,因为任何地方都不会抛出任何类型的错误或异常。谁能告诉我这可能是什么原因造成的?

编辑:由于请求,这里是我调用函数的方式:

function checkKey(e)
{ 
    if (e.keyCode == 13) 
    {
        //Get message and thread_id
        var message_field = $(':focus');

        //Validate and escape content
        var content = message_field.val();
        if (content == "") {return;} 

        //Grab thread_id
        var id = message_field.attr('id');
        var last_underscore = id.lastIndexOf("_");  
        var thread_id = id.substring(last_underscore+1);

        //Clear input
        message_field.val("");

        //Add message to page
        var ghost = insertGhost(thread_id,content,window.user_id);

        //Send message on to server
        sendMessage(content,thread_id,ghost);
   }
}

最佳答案

如果您定期轮询(而不是在每次操作后手动排队轮询),您可能会遇到超时行为。可能第4个没有失败,实际上第4个成功了,第5个默默失败了。

原因如下:浏览器一次最多允许向给定主机发送 2 个并发请求。任何其他请求都将放入对您的应用程序透明的队列中。但是,这些 AJAX 请求会超时。所以前两个没问题。接下来的两个必须等待一会儿,但它们会在超时适用之前发送和接收。随后的那些被添加到浏览器的队列中,但由于它们甚至在发送之前就超时了,您看不到任何事件。

您可以通过确保在成功/失败时执行 setTimeout 或其他管理您在任何时候有多少待处理请求的方法来测试这一点

关于javascript - AJAX 请求成功 3 次,然后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21373636/

相关文章:

javascript - 如何使用 JavaScript 取消选择按钮

javascript - 如何在删除/添加内容时使内容滑动?

javascript - JQGrid 子网格错误 如何解决?

php - 在通过本地主机上的浏览器将项目添加到数据库时遇到问题,例如用户之类的项目

javascript - 如何在 jQuery 中启用所有禁用行

javascript - 如何从 javascript 中的倒计时方法返回 boolean 值

javascript - jQuery:确认 .html() 是否可添加

javascript - 如何在不使用表单的情况下从 JavaScript 向服务器提交 get 请求

php - 从数据库获取 "cut off"HTML 值,然后将其输出到网站上

php - 如何在WampServer版本3.0.6 32位中更改mysql密码