我正在使用以下脚本将即时消息异步提交到我的数据库。
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/