Javascript设置超时倍数、ajax和等待时间
很长一段时间以来,我一直在尝试创建一个Javascript函数,该函数可以与多个setTimeout一起工作,并等待检查一个值 我在表单中输入了一个信息:Javascript设置超时倍数、ajax和等待时间,javascript,time,delay,settimeout,Javascript,Time,Delay,Settimeout,很长一段时间以来,我一直在尝试创建一个Javascript函数,该函数可以与多个setTimeout一起工作,并等待检查一个值 我在表单中输入了一个信息: <input type="hidden" id="answer_content" value="start" />; if($('#answer_content').val()=='start') { 1)create a content with an ajax request that genera
<input type="hidden" id="answer_content" value="start" />;
if($('#answer_content').val()=='start')
{
1)create a content with an ajax request that generate a div
1.1)when the request is finished , $('#answer_content').val('NEW_DIV_ID')
1.2)then i use this id = NEW_DIV_ID to make another ajax request (move the DIV)
1.3)Then when it's finished i change $('#answer_content').val('start');
}
它可以工作,但我想要的东西只有在前一个过程完成后才能工作,以避免错误。可能是这样的:
window.step = 1;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
switch(step){
case 1:
// do something with xhr response (xhr.responseText);
step++;
xhr.open("GET", url2, true);
break;
case 2:
// do something with xhr response #2 (xhr.responseText);
step++;
xhr.open("GET", url3, true);
break;
case 3:
// do something with xhr response #3 (xhr.responseText);
break;
}
}else{
console.log('error occured in request no#' + step);
}
}
xhr.open("GET", url1, true);
请阅读以了解如何正确格式化问题中的代码。使用承诺来解决您的任务。google for JavaScript promisesetTimeout不是解决这个问题的合适方法请在发布此类问题之前尝试理解文档谢谢您的回答我想我会尝试使用JavaScript promise我发现这看起来很有趣。现在我需要理解它。谢谢,这是一个好主意,但在每个过程中,我都需要等待并获得ajax请求后生成的值返回值。如果我不等待该值,新的div将取代前一个。它将等待,因为它只在上一个请求完成后才打开下一个请求。更新:有没有办法使用only promise?我不知道。
window.step = 1;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
switch(step){
case 1:
// do something with xhr response (xhr.responseText);
step++;
xhr.open("GET", url2, true);
break;
case 2:
// do something with xhr response #2 (xhr.responseText);
step++;
xhr.open("GET", url3, true);
break;
case 3:
// do something with xhr response #3 (xhr.responseText);
break;
}
}else{
console.log('error occured in request no#' + step);
}
}
xhr.open("GET", url1, true);