这是我在这里的第一个问题,所以我首先要说:大家好!
我正在尝试制作实时数据"演示文稿"在使用直接JavaScript和Ajax的花式表的形式,后端是PHP。为了刷新表,我需要每次发出请求,比方说3秒,4就可以了。该数据库是RedisDB。我制作了PHP脚本来获取数据并且确定了。我制作了一个JS文件来请求和处理/处理数据,这很好。 演示文稿看起来很棒,用JS编写的算法效果非常好,大约600行,一些简单的if-else&切换其他更复杂。
现在变得讨厌。我不能连续做到这一点,我尝试使用setTimeout()和setInterval(),我使用类似睡眠的函数制作定时器和无限循环,等等,但它只是不能在页面加载后的最初请求之后继续存活。
对于纯JS,Ajax请求的代码非常简单。我得到我的JSON字符串数据用jsonParse()解析它,然后处理数据。
这一切都有效,它是下一个失败的请求,无论它是如何启动的(用户操作或其他)。
AJAX代码:
window.onload = function(){
getEventdataFromDB();
}
function getEventdataFromDB(){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var dbData = xmlhttp.responseText;
if(dbData != ''){
processEvents(dbData); //function for data processing
}
}
}
xmlhttp.open('GET','getEvents.php?dataRequest=true',true);
xmlhttp.send();
}
我知道这些日子有点不顺心,不遵循流程并使用jQuery和其他框架,但我对最新和最简单的东西工作得很好,开头。
最好的方法是什么,我应该如何进行,使用什么。我做了一些研究,事情指向链接回调和Promise对象。
显然,我不是第一个这样做的人,所以前进的方向是什么。
答案 0 :(得分:1)
在开始下一个请求之前确保上一个请求结束的唯一方法是从上一个的onreadystatechanged事件开始下一个调用。由于ajax是异步运行的,因此无法保证您运行的任何其他代码是在ajax调用完成之前还是之后执行。
所以你需要稍微重新组织你的脚本:
/etc/R/Renviron
如果您希望请求之间有一点延迟,您可以在超时内将调用包装到下一个请求。