gpt4 book ai didi

javascript - 如果 Javascript 不是多线程的,是否有任何理由实现异步 Ajax 队列?

转载 作者:行者123 更新时间:2023-11-30 10:34:31 24 4
gpt4 key购买 nike

我的 PHP 服务器有问题(我的电脑是唯一的连接)。我最初认为部分原因是因为太多的 ajax 请求(我有一个脚本在每次击键时执行一个 ajax 请求)所以我实现了一个设计来控制 ajax 请求进入队列的流程。下面是我的代码:

//global vars:
activeAjaxThread = 0; //var describing ajax thread state
ajaxQue = []; //array of ajax request objects in queue to be fired after the completion of the previous request

function queRequest(ajaxObj) {
ajaxQue.push(ajaxObj);
if (activeAjaxThread == 0) {
fireOffAjaxQue();
} else {
return 'ajax thread is running';
}
}

function fireOffAjaxQue () {
activeAjaxThread = 1;
//getLastRequest();
if ((ajaxQue.length > 0) && activeAjaxThread == 1) {
$.ajax(ajaxQue[0]).always( function () {
ajaxQue.shift();
if (ajaxQue.length > 0) {
fireOffAjaxQue(); //fire off another ajax request since this one has been completed.
}
});
}
activeAjaxThread = 0; //thread has finished executing
}

实现:

//create ajax object
var ajaxObj = {
url: 'someplace.php',
data: dataVar,
success: function (data) {...}
};
//send ajax object to que
queRequest(ajaxObj);

然后我发现 Javascript 是多线程的,并阅读了一些关于 Javascript 事件处理的文章,例如 http://ejohn.org/blog/how-javascript-timers-work/ 上的这篇文章作者:John Resig(非凡的 jQuery)

既然如此,我在这里介绍的函数不会产生任何结果,因为 Javascript 已经在排队我的请求了吗?奇怪的是它似乎彻底改变了它。我的服务器崩溃较少,(不是那个认为它是解决方案任何想象中......啊),并且在它崩溃并重新启动后,之前排队的 ajax请求被发送,而早些时候它们似乎全部被一次发送并在服务器崩溃时消失在稀薄的空气中。

如果 Javascript 是单线程的,则对异步事件进行排队:

  1. 拥有 Ajax 请求管理器或队列有什么意义吗?
  2. 为什么我的代码会产生任何结果?

最佳答案

Javascript 是单线程的,但是一旦发送了 AJAX 请求,就可以说它不受 javascript 的控制。那是 AJAX 的异步部分。发出请求,然后代码继续。然后在收到响应时对其进行处理。请求不排队。

关于javascript - 如果 Javascript 不是多线程的,是否有任何理由实现异步 Ajax 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com