gpt4 book ai didi

javascript - 如何让javascript等到它从同步http请求中得到有效响应?

转载 作者:行者123 更新时间:2023-11-30 18:02:45 24 4
gpt4 key购买 nike

我知道使用同步请求不是一个好主意,但在这种情况下我确实需要它。

如果响应长度小于 20,我尝试让 getEndDate 函数调用自身,但在第一个不成功的请求之后(如果 url 给出的响应太短)它会转到 alert(enddate .EDDAYOW); 并且我收到错误,并且 getEndDate 继续每 500 毫秒发送一次请求。

我需要getEndDate 函数来继续发送请求,直到它获得有效响应并返回有效对象,然后才继续下一行 JS。如何实现?

var url = 'http://local.com/cgi-bin/hello2.pl';
// url returns a plain text:
// 1234567890 2013 05 May Friday 13 23 45 01


var enddate = getEndDate(url);

alert(enddate.EDDAYOW);

function getEndDate(url) {
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', url, false);
xmlhttp.send();
if (xmlhttp.status == 200 && xmlhttp.responseText.length > 20) {
var n = xmlhttp.responseText.split(" ");
return {
'edseconds': n[0],
'EDYEAR': n[1],
'EDMON': n[2],
'EDMONNAME': n[3],
'EDDAYOW': n[4],
'EDDAY': n[5],
'EDHOUR': n[6],
'EDMIN': n[7],
'EDSEC': n[8]
};
} else {
setTimeout("getEndDate(" + url + ")", 500);
}
}


function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

最佳答案

我不知道这是否满足你的要求,但我会把它改写成这样:

var enddate;

getEndDate(url);

function do_rest(returnDate)
{
enddate = returnDate;
alert(enddate.EDDAYOW);

// do more if you need
};


function getEndDate(url) {
var xmlhttp = getXmlHttp();

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200 && xmlhttp.responseText.length > 20) {
var n = xmlhttp.responseText.split(" ");
do_rest({
'edseconds': n[0],
'EDYEAR': n[1],
'EDMON': n[2],
'EDMONNAME': n[3],
'EDDAYOW': n[4],
'EDDAY': n[5],
'EDHOUR': n[6],
'EDMIN': n[7],
'EDSEC': n[8]
});
} else {
setTimeout("getEndDate(" + url + ")", 500);
}
}
}


xmlhttp.open('GET', url, false);
xmlhttp.send();
}

关于javascript - 如何让javascript等到它从同步http请求中得到有效响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513113/

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