Javascript 如何处理缓慢的Ajax请求/连接缓慢的人
这是一个“假设”情况 假设我有: 一个websocket告诉我在url上发送ajax,如Javascript 如何处理缓慢的Ajax请求/连接缓慢的人,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是一个“假设”情况 假设我有: 一个websocket告诉我在url上发送ajax,如http://localhost/Whatever每10秒一次 http://localhost/Whatever回复需要45秒(请根据具体情况列出电话号码) 我想知道浏览器会有什么反应?在我看来,有三种情况: (好的一个):浏览器真的很聪明:他理解我们的ajax 相同的url,这样他在当前调用之前不会堆栈ajax调用 完成了 浏览器理解我们使用相同的url,并在 Ajax第一次调用并启动一个新的(如果浏览器
http://localhost/Whatever
每10秒一次
http://localhost/Whatever
回复需要45秒(请根据具体情况列出电话号码)
我想知道浏览器会有什么反应?在我看来,有三种情况:
浏览器将按照您的请求顺序发送所有请求。一般来说,计算机会按照您发出指令的顺序执行指令。如果您想要或需要特殊的行为,例如限制请求的速率或在前一个请求完成之前不发送后续请求,您需要自己实现这些行为。Imho,此伪代码可能会对您有所帮助
var requestLock = false;
function pollFromSocket() {
if (someCondition) {
sendRequest();
}
}
function sendRequest() {
if (requestLock) {
return;
}
requestLock = true;
$.get('/whatever')
.done(function(response) {
// process response
})
.always(function() {
requestLock = false;
});
}
嗯,这个伪代码可能对你有帮助
var requestLock = false;
function pollFromSocket() {
if (someCondition) {
sendRequest();
}
}
function sendRequest() {
if (requestLock) {
return;
}
requestLock = true;
$.get('/whatever')
.done(function(response) {
// process response
})
.always(function() {
requestLock = false;
});
}
嗯,这个伪代码可能对你有帮助
var requestLock = false;
function pollFromSocket() {
if (someCondition) {
sendRequest();
}
}
function sendRequest() {
if (requestLock) {
return;
}
requestLock = true;
$.get('/whatever')
.done(function(response) {
// process response
})
.always(function() {
requestLock = false;
});
}
嗯,这个伪代码可能对你有帮助
var requestLock = false;
function pollFromSocket() {
if (someCondition) {
sendRequest();
}
}
function sendRequest() {
if (requestLock) {
return;
}
requestLock = true;
$.get('/whatever')
.done(function(response) {
// process response
})
.always(function() {
requestLock = false;
});
}
您喜欢哪种行为?[1]中止第一个请求并启动第二个请求,[2]等待第一个请求并在第一个请求结束时呼叫第二个请求,[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个操作,您的代码(或您正在使用的库)必须实施those@Miraage我当然更喜欢我的第一个案例->你的[3]。但正如patrick Evans所说,第三种是默认行为,你可以控制浏览器对每种情况的反应。例如,在案例一中,您可以在启动ajax请求时设置一个变量,浏览器在执行另一个请求之前检查该变量,在ajax调用完成后只返回该变量。浏览器上的AJAX请求最终将在大多数浏览器上超时,但其细节是特定于浏览器的。使用类似jquery的库,您可以以跨浏览器的方式设置超时。您更喜欢哪种行为?[1]中止第一个请求并启动第二个请求,[2]等待第一个请求并在第一个请求结束时调用第二个请求,[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个请求,您的代码如下:(或您正在使用的库)必须实现those@Miraage我当然更喜欢我的第一个案例->你的[3]但我同意patrick Evans所说的第三种是默认行为。您可以控制浏览器对每种情况的反应。例如,在第一种情况下,您可以在启动ajax请求时设置一个变量,浏览器在执行另一个请求之前检查该变量,在ajax调用完成后仅返回该变量。第三种情况下浏览器上的ppen。浏览器上的AJAX请求最终会在大多数浏览器上超时,但其细节是特定于浏览器的。使用类似jquery的库,您可以以跨浏览器的方式设置超时。您喜欢哪种行为?[1]中止第一个请求并启动第二个请求,还是[2]等待第一个请求并在第一端调用第二个请求,或者[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个请求,您的代码(或您正在使用的库)必须实现those@Miraage我当然更喜欢我的第一个案例->你的[3]但我同意patrick Evans所说的第三种是默认行为。您可以控制浏览器对每种情况的反应。例如,在第一种情况下,您可以在启动ajax请求时设置一个变量,浏览器在执行另一个请求之前检查该变量,在ajax调用完成后仅返回该变量。第三种情况下浏览器上的ppen。浏览器上的AJAX请求最终会在大多数浏览器上超时,但其细节是特定于浏览器的。使用类似jquery的库,您可以以跨浏览器的方式设置超时。您喜欢哪种行为?[1]中止第一个请求并启动第二个请求,还是[2]等待第一个请求并在第一端调用第二个请求,或者[3]如果第一个请求尚未响应,则取消第二个请求?浏览器不会自动执行前两个请求,您的代码(或您正在使用的库)必须实现those@Miraage我当然更喜欢我的第一个案例->你的[3]。但我同意patrick Evans所说的第三个案例将是默认行为。你可以控制浏览器的访问方式